吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1742|回复: 5
收起左侧

[已解决] C语言字符串拼接出错

[复制链接]
mxwawaawxm 发表于 2019-8-4 22:02
本帖最后由 mxwawaawxm 于 2019-8-7 10:00 编辑

不使用<string.h>写一个字符串拼接
下面是第一种代码,想把"hello world"接到"welcome!"后面去,可最后没有改变
2019-08-04_215906.png
[C] 纯文本查看 复制代码
#include <stdio.h>

int main(void)
{
    char string1[200] = "welcome!";
    char *string2 = "hello world";
    int i=0;
    
    while (string1[i++] !='\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;
}



我发现把其中代码
[C] 纯文本查看 复制代码
    while (string1[i++] !='\0') {
        ;
    }

改成
[C] 纯文本查看 复制代码
    while (string1[i] !='\0') {
        i++;
    }

其他不用改动,输出就对了这是为什么呢,请问
2019-08-04_220031.png
[C] 纯文本查看 复制代码
#include <stdio.h>

int main(void)
{
    char string1[200] = "welcome!";
    char *string2 = "hello world";
    int i=0;
    
    while (string1[i] !='\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[8] = '\0',退出循环,但i++ = 9;
修改后,当i = 8时,此时string1[8] = '\0',退出循环,但i = 8;

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

无闻无问 发表于 2019-8-4 22:40
while (string1[i++] !='\0') {
&#160;&#160;&#160;&#160;;
}这一句跳出时,i已经指向9,连接helloword时中间应该有1-2个\0,打印时遇见\0认为结束了,后面就不打了……你可下个断点,在下面局部变量中看到字符串值……

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

秋狝 发表于 2019-8-4 22:40
一个是\0的下一处拼接,一个是\0处拼接,第二种才是正确的实现,可以打印一下结束循环的i就明白了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

testicles 发表于 2019-8-4 22:55
可以参考下库实现代码  从模仿开始
https://blog.csdn.net/lisonglisonglisong/article/details/44278013

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| mxwawaawxm 发表于 2019-8-5 20:24
testicles 发表于 2019-8-4 22:55
可以参考下库实现代码  从模仿开始
https://blog.csdn.net/lisonglisonglisong/article/details/44278013

请问下
[C] 纯文本查看 复制代码
#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"上不明白
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 02:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表