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

Why does x[2] reassign the y value as well? And how do I fix this

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

int main(void)
{

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

    x[2] = '[=10=]';

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

} 

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

那是因为 yx 指向 get_string 返回的同一个字符串。

get_string:

Reads a line of text from standard input and returns it as a string (char *), sans trailing newline character. [...]

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

x[2] = '[=10=]';

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

我的猜测是 get_string() 为您提供了字符串上的指针。因此,当您在 xy 中分配值时,您实际上是在指向一个字符串而不是存储它。 因此,当您更改某些内容时,您会影响字符串本身。 要修复它,您应该使用 strcpy(); 复制字符串,这样您就不会使用指针引用。