【发布时间】:2015-11-10 20:39:06
【问题描述】:
我有一个动态分配的char 数组,我想将两个字符串组合到其中,所以我尝试了以下方法:
char *strcpy2 (char *str1, char *str2)
{
int total = strlen (str1) + strlen (str2) + 1;
char *nstr = malloc (sizeof (char) * total);
while (*str1 != '\0') *nstr++ = *str1++;
while (*str2 != '\0') *nstr++ = *str2++;
*nstr = '\0';
printf ("size: %d\n", strlen (nstr));
return &(nstr[0]);
}
int main (void)
{
char *concat = strcpy2 ("Hello, ", "World.");
puts (concat);
free (concat);
return 0;
}
当我运行它时,它打印出nstr 的大小为0,然后是Segmentation fault (core dumped)。
但是当我这样做时:
char *strcpy2 (char *str1, char *str2)
{
int total = strlen (str1) + strlen (str2) + 1;
char *nstr = malloc (sizeof (char) * total);
char *p = nstr;
while (*str1 != '\0') *p++ = *str1++;
while (*str2 != '\0') *p++ = *str2++;
*p = 0;
printf ("size: %d\n", strlen (nstr));
return nstr;
}
它工作正常并打印了正确的nstr 长度。我很疑惑,是什么导致了崩溃?
【问题讨论】:
-
你应该使用 gdb 来调试 file.core,看看到底哪里出了问题。
-
x[0]与*x含义相同