C++ 在添加';a';和';y';角色,以及为什么不是';指定的字符不是nul终止符吗?
添加字符后,数组必须包含6个字符“roaday”,但for循环执行7次,并且当C++ 在添加';a';和';y';角色,以及为什么不是';指定的字符不是nul终止符吗?,c++,C++,添加字符后,数组必须包含6个字符“roaday”,但for循环执行7次,并且当if(p[i]='\0'){p[i]='b';}将不分配字符b而不是nul终止符 我如何分配一个字符而不是nul终止符,为什么有7个字符而不是6个字符 #include <iostream> using namespace std; void main() { char x[100]; cin >>x; // cin >> "road" char* p
if(p[i]='\0'){p[i]='b';}
将不分配字符b而不是nul终止符
我如何分配一个字符而不是nul终止符,为什么有7个字符而不是6个字符
#include <iostream>
using namespace std;
void main()
{
char x[100];
cin >>x; // cin >> "road"
char* p;
p = x;
for (int i = 0; i < 100; i++)
{
if (p[i] == '\0')
{
/*
no character is assigned to nul terminator
*/
/* this line */ p[i] = p[0];
p[i++] = 'a';
p[i++] = 'y';
p[i++] = '\0';
cout << endl << p << endl;
break;
}
}
cout << p;
}
#包括
使用名称空间std;
void main()
{
charx[100];
cin>>x;//cin>>“道路”
char*p;
p=x;
对于(int i=0;i<100;i++)
{
如果(p[i]='\0')
{
/*
没有为nul终止符指定字符
*/
/*该行*/p[i]=p[0];
p[i++]='a';
p[i++]='y';
p[i++]='\0';
库特
当if(p[i]='\0'{p[i]='b';}时,将不分配字符b而不是nul终止符
这一点本身就行,但在您的代码中,您正在用下一行覆盖此赋值,因为您可能误解了i++
当i==4
时,您正在输入if语句,这将导致:
p[4] = p[0] // overwrite '\0' with 'r'
p[4] = 'a'; // i is increased afterwards so you overwrite 'r' again
p[5] = 'y';
p[6] = '\0';
// i equals 7 now
因此,要用第一个字符覆盖'\0'
,然后附加'a'
和'y'
,您只需将p[i]=p[0]
更改为p[i++]=p[0]不可替换这个位置两次。你确定吗?看起来这个循环会对我执行五次,直到找到第一个NUL终结符并打印“RayRay2”。中间的额外“R”来自<代码> [i++]=P(0);< /代码> -你指的是什么?“1”当(p [i]==‘0’){p[i]='b';}不会指定字符b而不是nul终止符。“请提供产生上述行为的字符。2)“为什么有7个字符而不是6个字符”您的数组始终包含100
个字符,因为它被声明为char x[100]
作为这里的新用户,请阅读。关于您的问题,请提取并提供a,并注意一致的格式。毕竟,您希望人们阅读它。/*这一行*/p[i]=p[0]
OK,现在用字符串“r”中的第一个字符替换nul终止符,但不再递增“i”。因此下一行,p[i++]='a';
将用“a”覆盖“r”。“没有字符分配给nul终止符”-是的?接下来的两行都将覆盖p[i]处的原始nul终止符。如果您认为您标记的行没有设置字符,那么它就是,但您正在用下一个字符覆盖该字符。如果您想保留此额外的“r”,请将p[i]
更改回p[i++]
这样,在设置“r”后,i将递增。但它的工作输出是roaday,而不是roadayroadRay@user12918858您是否正确地采用了更改?检查-它输出roadray