我很困惑是什么导致了我的程序中的这种行为。我只是想将一个 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]);
}
有人以前经历过这种情况吗?如果有帮助的话,我可以发布我的输出。
谢谢。
最佳答案
几个问题:
循环 while n < x
。什么是x
?如果x >= 50
,您将耗尽数组的末尾。您的循环条件需要防止这种可能性。
另外,请记住 malloc
返回的内存未初始化。最好为 NULL 终止符分配一个额外的字节。您缺少的是实际设置 NULL 终止符值的代码。这样做的结果是你的 a[]
字符串很可能不是以 NULL 结尾的(最后一个字符是先前存储在该字节中的任何随机垃圾)。当您尝试打印它们或使用类似 strlen
的字符串函数时在它上面,您将读取字符串末尾的内容,并读取随后内存范围内的任何内容。
关于c - 尝试在 C 中复制数组时的字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978284/