c - 二维字符串数组和 Strcpy 错误?

标签 c arrays strcpy

我在为二维字符串数组赋值时遇到问题。代码如下:

  Char array[]= "Nary had a little lamb";
  int chunkSize = 4;
  char inventory[totalRuns][chunkSize];

  subString(result, array,0,0+chunkSize);
  printf("CHUNK 1 = %s\n",result);          //Prints "Nary"
  strncpy(inventory[0],result,chunkSize);
  memset(result, '\0', strlen(result));

  subString(result, array,pos,pos+chunkSize);
  printf("CHUNK 2 = %s\n",result);          // Prints " had"
  strncpy(inventory[1],result,chunkSize);

以及函数子字符串:

char *subString(char* putHere, char* request,int start,int end){
    char* loc = request+start;
    char* end_loc = request+end;

    memcpy(putHere, loc, end_loc-loc);

    return putHere; 

}

当我运行这段代码时,输​​出是

block 1 = 无

block 2 = 有

这是正确的,但是当我打印库存时,我得到

inventory[0]=Nary had       //Should be just "Nary"
inventory[1]= had           //correct

你知道我在这里做错了什么吗?

最佳答案

您的 subString 不会以 0 终止目标缓冲区,并且如果给定范围内没有 0 字节,strncpy 也不会以 0 终止。因此,您的 inventory 包含未终止的 char 序列,并且 printf 会一直打印,直到 printf 在某处找到 0 字节或由于访问冲突而崩溃。

inventory 的内存布局中 inventory[1] 直接位于 inventory[0] 的最后一个 char 之后>,因此 printf("%s", inventory[0]); 打印这两个 block ,因为第一个 block 不是 0 终止的。在您的情况下,似乎紧接着有一个 0 字节,但由于 inventory 未初始化,所以这是巧合。

关于c - 二维字符串数组和 Strcpy 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235092/

相关文章:

c - 为什么 float 不起作用?

php - 从 php/mysql 获取多条记录

javascript - 反转数组 - Eloquent javascript 第 4 章

c - Free() 部分释放的字符串数组 C

c - C语言中的逆序词

c - 为什么这段简单的 C 代码会出现段错误?

c - 用户定义的最小和最大函数的奇怪行为

c - 更专业的宏

c - 在 OpenCV 中混合图层

c++ - C/C++ strcpy 未处理的读取冲突