C语言字符串拼接出错
本帖最后由 mxwawaawxm 于 2019-8-7 10:00 编辑不使用<string.h>写一个字符串拼接
下面是第一种代码,想把"hello world"接到"welcome!"后面去,可最后没有改变
#include <stdio.h>
int main(void)
{
char string1 = "welcome!";
char *string2 = "hello world";
int i=0;
while (string1 !='\0') {
;
}
while (*string2!='\0') {
*(string1+i) = *string2++;
printf("*(string1+%d)=%c\n", i, *(string1+i));
i++;
}
*(string1+i) = '\0';
printf("*(string1+%d)=%c\n", i, *(string1+i));
puts(string1);
return 0;
}
我发现把其中代码
while (string1 !='\0') {
;
}
改成
while (string1 !='\0') {
i++;
}
其他不用改动,输出就对了{:301_1009:}这是为什么呢,请问{:301_977:}
#include <stdio.h>
int main(void)
{
char string1 = "welcome!";
char *string2 = "hello world";
int i=0;
while (string1 !='\0') {
i++;
}
while (*string2!='\0') {
*(string1+i) = *string2++;
printf("*(string1+%d)=%c\n", i, *(string1+i));
i++;
}
*(string1+i) = '\0';
printf("*(string1+%d)=%c\n", i, *(string1+i));
puts(string1);
return 0;
} 修改前,当i = 8时,此时string1 = '\0',退出循环,但i++ = 9;
修改后,当i = 8时,此时string1 = '\0',退出循环,但i = 8; while (string1 !='\0') {
;
}这一句跳出时,i已经指向9,连接helloword时中间应该有1-2个\0,打印时遇见\0认为结束了,后面就不打了……你可下个断点,在下面局部变量中看到字符串值…… 一个是\0的下一处拼接,一个是\0处拼接,第二种才是正确的实现,可以打印一下结束循环的i就明白了 可以参考下库实现代码从模仿开始
https://blog.csdn.net/lisonglisonglisong/article/details/44278013 testicles 发表于 2019-8-4 22:55
可以参考下库实现代码从模仿开始
https://blog.csdn.net/lisonglisonglisong/article/details/44278013
请问下
#include <stdio.h>
int main(void)
{
char *p = "456"+1;
printf("%s\n", p);
printf("%c\n", *p++);
printf("%c\n", *p);
return 0;
}
这串代码char *p = "456"+1;
为什么+1,指针就会偏移到"56"上{:301_1007:}不明白
页:
[1]