C++ 在添加';a';和';y';角色,以及为什么不是';指定的字符不是nul终止符吗?

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

添加字符后,数组必须包含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;
    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