我正在编写C函数strcat的指针版本。它将字符串t复制到s的末尾。这是我的解决方案:
/* strcat: a pointer version of the strcat (copy string t to the end of s) */
void strcat (char *s, char *t)
{
while (*s++ != '\0') /* find the end of s */
;
while (*s++ = *t++)
;
}
我运行它并且崩溃了 - Code Blocks调试器将其称为分段错误,并且该部分功能导致了崩溃:
while (*s++ = *t++)
我做错了什么?
答案 0 :(得分:1)
这是固定版本和测试程序:
#include <stdio.h>
void strcat (char *s, char *t)
{
while (*s++)
;
s--;
while (*s++ = *t++)
;
}
int
main(void)
{
char str1[100] = "abc";
char *str2 = "def";
strcat(str1, str2);
printf("%s\n", str1);
return 0;
}
如果您按以下方式拨打strcat()
,
char *str1 = "abc";
char *str2 = "def";
strcat(str1, str2);
那么你的程序可能会崩溃,因为编译器通常会将字符串文字放在只读内存区域,尝试写入这些地方会导致段错误。