2

我对在我的程序中导致这种行为的原因感到困惑。我只是想将一个char*数组的内容复制到另一个数组,而不是复制元素,但它以一种奇怪的方式连接字符串。我正在做这样的事情:

char* a[50]; 
char* b[50];

for(int n=0; n<x; n++){
    a[n] = malloc(sizeof(char) * (1 + strlen(b[n])));
    strcpy(a[n], b[n]);
}

有谁之前经历过这个吗?如果有帮助,我可以发布我的输出。

谢谢。

4

2 回答 2

1

几个问题:

你循环 while n < x。是什么x?如果x >= 50,您将用完数组的末尾。您的循环条件需要防止这种可能性。

另外,请记住,返回的内存malloc是未初始化的。最好为 NULL 终止符分配一个额外的字节。您缺少的是实际设置 NULL 终止符值的代码。这样做的结果是您的a[]字符串很可能不是以 NULL 结尾的(最后一个字符是先前存储在该字节中的任何随机垃圾)。当您尝试将它们打印出来或使用类似的字符串函数strlen时,您将读取字符串末尾的内容,并读取恰好位于随后的内存范围内的任何内容。

于 2012-10-19T17:34:17.953 回答
1

尝试使用 strncpy,请注意您在 a[n] 的末尾添加了空终止字符,这样您就可以肯定知道您要复制的内容,而不是依赖于 b[n] 具有空终止字符的假设。

于 2012-10-19T17:34:43.477 回答