mxwawaawxm 发表于 2019-8-4 22:02

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;
}

pojiedaxia 发表于 2019-8-4 22:39

修改前,当i = 8时,此时string1 = '\0',退出循环,但i++ = 9;
修改后,当i = 8时,此时string1 = '\0',退出循环,但i = 8;

无闻无问 发表于 2019-8-4 22:40

while (string1 !='\0') {
    ;
}这一句跳出时,i已经指向9,连接helloword时中间应该有1-2个\0,打印时遇见\0认为结束了,后面就不打了……你可下个断点,在下面局部变量中看到字符串值……

秋狝 发表于 2019-8-4 22:40

一个是\0的下一处拼接,一个是\0处拼接,第二种才是正确的实现,可以打印一下结束循环的i就明白了

testicles 发表于 2019-8-4 22:55

可以参考下库实现代码从模仿开始
https://blog.csdn.net/lisonglisonglisong/article/details/44278013

mxwawaawxm 发表于 2019-8-5 20:24

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]
查看完整版本: C语言字符串拼接出错