gpt4 book ai didi

c - 在 C 中将 1 个字符串复制到另一个字符串时出错

转载 作者:行者123 更新时间:2023-11-30 20:47:24 24 4
gpt4 key购买 nike

  • 我试图将 1 个字符串的内容复制到另一个字符串(a 到 b)。我故意让第二个字符串(b)小于第一个字符串一(一)。
  • 我将第一个的内容复制到第二个

    。我对它们都添加了 WATCH 。在“调试”选项卡中,我发现虽然复制原始字符串会被破坏,新字符串也会被破坏显示的尺寸大于其尺寸。

       #include<stdio.h>
    int main()
    {
    char a[10]="What?";
    char b[2];
    int i;
    for(i=0;i<6;i++)
    {
    b[i]=a[i];
    }
    printf("This is %s",a);
    printf("\n this is b now: ",b);
    return 0;

    }

  • 我已附上相同的屏幕截图。我拿了一个=一串尺码 10 。 a =“什么?”然后我取了一个字符串 b[2]

  • 复制后,我打印了 a 和 b 。我预计输出是, a =“什么?” , b="WH"但输出是别的东西。(参见截图)

为什么原始字符串被破坏?指针改变了吗?但我已经把它变成了常量指针。它不能改变。

这是我面临的问题的屏幕截图: https://www.dropbox.com/s/8xwxwb27qis8xww/sjpt.jpg

请帮助别人!!

最佳答案

  1. 您正在将 6 个字节复制到两个字节的数组中,本质上是调用 undefined behavior .
  2. 您正在使用 %s 说明符将数组 b 传递给 printf,该说明符需要 null-terminated string ,而 b 很可能此时不是以 null 终止的,这是另一个未定义的行为。

此外,一个可以放入 2 字节数组的以 null 结尾的字符串本质上只能有一个可打印字符,因此您不应期望 b 为“WH”。最好的情况是,如果修复复制,它只能是“W”,因为第二个字符将是终止字节 (\0)。如果您想要两个字符,请将数组大小增加到 3 以允许空终止符,或者干脆不使用 C 字符串并使用“%c%c”格式字符串打印出两个字节。

关于c - 在 C 中将 1 个字符串复制到另一个字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com