【发布时间】:2015-12-16 07:06:54
【问题描述】:
我有一个简单的程序,我正在尝试了解 strcat 和 strcpy。但是,它似乎不太正常。
它似乎复制和附加就好了。但是,当我打印时,我认为它正在访问其范围之外的内存位置。
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int sep, char ** arr)
{
int i, size = sep;
// Get size of whole string including white spaces
for(i = 1; i < sep; i++)
size += strlen(arr[i]) + 1;
// Allocate memory
char *ptr = malloc(size);
for(i = 0; i < sep; i++)
{
// Copy first string then append
if(i >= 1)
strcat(ptr, arr[i]);
else
strcpy(ptr, arr[i+1]);
//Replace null byte
ptr[strlen(ptr)] = ' ';
}
// Add nullbyte to end
ptr[strlen(ptr) + 1] = '\0';
// Print whole string
printf("\n%s\n\n", ptr);
return 0;
}
如果我传递这个字符串:O_O hi o noe0x1828GFF2 32 32 32 3 23 2 3,它会打印这个:
O_O O_O hi o noe0x1828GFF2 ??32 ??t?32 ?̐?32 3 23 2 3
如您所见,它会打印第一个字符串,直到空格的两倍,以及许多甚至不在字符串中的字符。
我在这里做错了什么?
编辑:在开始时找出双字符串。只需在strcat(ptr, arr[i]); 中为 arr[i] 添加 +1。但是,它仍然会打印不存在的字符。
如果我去掉这行:ptr[strlen(ptr)] = ' ',那么奇怪的字符就不存在了,但它也会留下空格。
【问题讨论】:
标签: c string pointers strcpy strcat