#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
。
答案 0 :(得分:4)
答案 1 :(得分:0)
您为NUL
终止符分配了字符串,因此printf
会在找到它时结束打印。 x
和y
也指向相同的字符串文字。尝试使用此代码来了解发生的情况:
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()
给你一个关于字符串的指针。因此,当您在x
和y
中分配值时,实际上是指向一个字符串而不是存储它。
所以当你改变某些东西时,你正在影响字符串本身。
要修复它,您应该使用strcpy();
复制字符串,以便不使用指针引用。