代码正在工作它剪切了第一个单词并最终将其放入文本中。我不明白代码中的一行,假设我的字符串是“hello world”。
当我使用代码“* p ++ ='\ 0';”
时在此行之前:p: "world"
s: "hello world"
此行之后:p: "world"
s: "hello"
为什么会改变?并削减世界这个词?
完整代码:
void func(char *s)
{
char * p = strchr(s, ' ');
char * t = (char*)malloc(strlen(s) + 1);
if (!t)
{
printf("Memory allocated failed");
exit(1);
}
*p++ = '\0';
strcat(strcat(strcpy(t, p), " "), s);
strcpy(s, t);
free(t);
}
答案 0 :(得分:2)
在分配到*p
之前,您有以下内容:
+---+---+---+---+---+---+---+---+---+---+---+---+
s: |'H'|'e'|'l'|'l'|'o'|' '|'W'|'o'|'r'|'l'|'d'| 0 |
+---+---+---+---+---+---+---+---+---+---+---+---+
^
+---+ |
p: | | ----------------+
+---+
执行*p++ = '\0';
后,您有
+---+---+---+---+---+---+---+---+---+---+---+---+
s: |'H'|'e'|'l'|'l'|'o'| 0 |'W'|'o'|'r'|'l'|'d'| 0 |
+---+---+---+---+---+---+---+---+---+---+---+---+
^
+---+ |
p: | | --------------------+
+---+
IOW,您已使用字符串终止符替换s
中的空格,这就是您在打印"Hello"
时才看到s
的原因。