为什么x [2]也重新分配y值?我该如何解决这个问题

时间:2017-04-18 07:53:47

标签: c variables cs50

#include <stdio.h>
#include <cs50.h>

int main(void)
{

    string y, x;
    y = x = get_string();

    x[2] = '\0';

    printf("%s", x);
    printf("%s", y);

} 

如果输入为abcdef。此代码的输出为abab。为什么不是ababcdef

3 个答案:

答案 0 :(得分:4)

这是因为yx指向get_string返回的相同字符串。

get_string

  

从标准输入读取一行文本,并将其作为stringchar *)返回,不带尾随换行符。 [...]

答案 1 :(得分:0)

您为NUL终止符分配了字符串,因此printf会在找到它时结束打印。 xy也指向相同的字符串文字。尝试使用此代码来了解发生的情况:

x[2] = '\0';

for(int idx = 0; idx < 6; idx++ )
{
    if( x[idx] == '\0')
        printf("NUL");
    else
        printf("%c", x[idx]);
}
    printf("\n");
for(int idx = 0; idx < 6; idx++ )
{
    if( y[idx] == '\0')
        printf("NUL");
    else
        printf("%c", y[idx]);
}

答案 2 :(得分:0)

我的猜测是get_string()给你一个关于字符串的指针。因此,当您在xy中分配值时,实际上是指向一个字符串而不是存储它。 所以当你改变某些东西时,你正在影响字符串本身。 要修复它,您应该使用strcpy();复制字符串,以便不使用指针引用。