为什么 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
.
那是因为 y
和 x
指向 get_string
返回的同一个字符串。
Reads a line of text from standard input and returns it as a string
(char *
), sans trailing newline character. [...]
您为字符串分配了 NUL
终止符,因此 printf
将在找到它时结束打印。 x
和 y
也指向相同的字符串文字。尝试此代码以了解发生了什么:
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()
为您提供了字符串上的指针。因此,当您在 x
和 y
中分配值时,您实际上是在指向一个字符串而不是存储它。
因此,当您更改某些内容时,您会影响字符串本身。
要修复它,您应该使用 strcpy();
复制字符串,这样您就不会使用指针引用。
#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
.
那是因为 y
和 x
指向 get_string
返回的同一个字符串。
Reads a line of text from standard input and returns it as a
string
(char *
), sans trailing newline character. [...]
您为字符串分配了 NUL
终止符,因此 printf
将在找到它时结束打印。 x
和 y
也指向相同的字符串文字。尝试此代码以了解发生了什么:
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()
为您提供了字符串上的指针。因此,当您在 x
和 y
中分配值时,您实际上是在指向一个字符串而不是存储它。
因此,当您更改某些内容时,您会影响字符串本身。
要修复它,您应该使用 strcpy();
复制字符串,这样您就不会使用指针引用。