c - 尝试在 C 中复制数组时的字符串连接

标签 c arrays string

我很困惑是什么导致了我的程序中的这种行为。我只是想将一个 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/

相关文章:

java - 如何用JAVA向文件中写入特定数据

c - 排序链表递归

c - 使用同一个数组重复存储数据

c++ - 键盘记录器和鼠标追踪器 : should I use non-blocking I/O?

c++ - 在 OpenCV 中绘制多边形?

arrays - 映射具有特定格式的 Swift 数组

ios - 确定 UITextView 将截断字符串的位置

c - 如何创建我自己的比标准 printf 和 scanf 更快的 C I/O 函数?

php - 将 session 数组存储在数据库中

字符串的 Java 不变性,使用 "+="运算符