我在为二维字符串数组赋值时遇到问题。代码如下:
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/