f**********d 发帖数: 4960 | 1 最近有点工作要用到c:
想丛一个array复制到另一个array,想把内容复制过去,不能指向同一个地址(把指针
复制过去)。
我的代码是复制指针的,a的内容变了b的内容也变了,这不是我需要的。如何改正???
char *a[3] = {"1", "2", "3"};
char *b[3];
b[0] = a[0];
b[1] = a[1];
b[2] = a[2]; |
z*y 发帖数: 1311 | 2
??
strcpy ?
【在 f**********d 的大作中提到】 : 最近有点工作要用到c: : 想丛一个array复制到另一个array,想把内容复制过去,不能指向同一个地址(把指针 : 复制过去)。 : 我的代码是复制指针的,a的内容变了b的内容也变了,这不是我需要的。如何改正??? : char *a[3] = {"1", "2", "3"}; : char *b[3]; : b[0] = a[0]; : b[1] = a[1]; : b[2] = a[2];
|
f**********d 发帖数: 4960 | 3 简单一点说吧,
a[0] = "a";
a[0]其实是指向这个"a"的指针,
如何把a[0]的内容提出来,放到一个新的string里。
【在 z*y 的大作中提到】 : : ?? : strcpy ?
|
s******y 发帖数: 416 | 4 *b[I] = *a[I];
【在 f**********d 的大作中提到】 : 简单一点说吧, : a[0] = "a"; : a[0]其实是指向这个"a"的指针, : 如何把a[0]的内容提出来,放到一个新的string里。
|
f**********d 发帖数: 4960 | 5 试了报错,其实我是要逐行读入文件,并把每一行用";"分隔成不同fields,再把
fields存入array里。
文件第一行是header,之后每行为 v1;v2;v3;v4;v5
现在*Words[j] = *pch;报错了,说access violation writing location 0xccccccccc.
fp = fopen("Data Files\ChestClinic.txt", "r");
if (fp == NULL)
{
printf("file is null");
}
i = 0;
while (fgets(line, sizeof(line), fp))
{
if (i == 0)
{
printf("The format of network structure file is:n");
printf("%sn", line);
printf("The data of network structure file is:n");
}
else
{
char *pch;
// Define the array to store the words.
char *Words[NUM_WORDS] = {NULL};
j = 0;
printf("%sn", line);
pch = strtok(line, ";");
while (pch != NULL)
{
printf("%sn", pch);
*Words[j] = *pch;
pch = strtok(NULL, ";");
j++;
}
// Check if the data format is alright.
if (sizeof(Words)/sizeof(Words[0]) != NUM_WORDS)
{
printf("The data format is wrong.n");
}
else
{
NodeNames[i - 1] = Words[0];
}
}
i++;
}
【在 s******y 的大作中提到】 : *b[I] = *a[I];
|
p***o 发帖数: 1252 | 6 你对C完全没概念,还是拿Python做吧 ...
0xccccccccc.
【在 f**********d 的大作中提到】 : 试了报错,其实我是要逐行读入文件,并把每一行用";"分隔成不同fields,再把 : fields存入array里。 : 文件第一行是header,之后每行为 v1;v2;v3;v4;v5 : 现在*Words[j] = *pch;报错了,说access violation writing location 0xccccccccc. : fp = fopen("Data Files\ChestClinic.txt", "r"); : if (fp == NULL) : { : printf("file is null"); : } : i = 0;
|
f**********d 发帖数: 4960 | 7 不行啊,这个是api人家只提供c接口,
不然我费什么劲。
【在 p***o 的大作中提到】 : 你对C完全没概念,还是拿Python做吧 ... : : 0xccccccccc.
|
n*********u 发帖数: 1030 | 8 应该要从底层开始copy,array的element是char,int的话copy char,int就可以了(
注意overflow)。
array的element是object的话要run每个object的copy() function。
*想问一下他的API是c的,你再根据你的需要写个转成其他语言的wrapper不可以么(比
如swig)?除了performance需要,写c真的很劳命伤财的。 |
f**********d 发帖数: 4960 | 9 谢谢参与讨论的网友,已经解决了,需要用malloc分配地址,然后用strcpy拷贝出来。
c是什么都要操心,这也是它好的理由吧。
【在 n*********u 的大作中提到】 : 应该要从底层开始copy,array的element是char,int的话copy char,int就可以了( : 注意overflow)。 : array的element是object的话要run每个object的copy() function。 : *想问一下他的API是c的,你再根据你的需要写个转成其他语言的wrapper不可以么(比 : 如swig)?除了performance需要,写c真的很劳命伤财的。
|
W***o 发帖数: 6519 | 10 这个好像是比较基础的C问题啊,当年写C的时候应该想都不用想
【在 f**********d 的大作中提到】 : 谢谢参与讨论的网友,已经解决了,需要用malloc分配地址,然后用strcpy拷贝出来。 : c是什么都要操心,这也是它好的理由吧。
|
a9 发帖数: 21638 | 11 你从一开始定义char *a[3], *b[3]就搞错了
??
【在 f**********d 的大作中提到】 : 最近有点工作要用到c: : 想丛一个array复制到另一个array,想把内容复制过去,不能指向同一个地址(把指针 : 复制过去)。 : 我的代码是复制指针的,a的内容变了b的内容也变了,这不是我需要的。如何改正??? : char *a[3] = {"1", "2", "3"}; : char *b[3]; : b[0] = a[0]; : b[1] = a[1]; : b[2] = a[2];
|
y**********a 发帖数: 824 | 12
char *a[3] = {"1", "2", "3"};
char *b[3];
a, b 的空间都是在栈上面分配的,跳出函数后就会被回收了。
【在 f**********d 的大作中提到】 : 谢谢参与讨论的网友,已经解决了,需要用malloc分配地址,然后用strcpy拷贝出来。 : c是什么都要操心,这也是它好的理由吧。
|
f**********d 发帖数: 4960 | 13 c都忘了,还是本科学的。
不过还好,搞了两天,基本程序通了。
【在 a9 的大作中提到】 : 你从一开始定义char *a[3], *b[3]就搞错了 : : ??
|