0

我在将值分配给二维字符串数组时遇到问题。这是代码:

  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; 

}

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

CHUNK 1 = Nary

CHUNK 2 = 有

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

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

任何想法我在这里做错了什么?

4

1 回答 1

2

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

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

于 2013-03-05T22:14:40.647 回答