char array打印1个字符短于我指定的内容

时间:2017-10-21 20:20:42

标签: c arrays string for-loop

我正在尝试创建一个包含X个字符的字符数组。

我需要第一个X-1字符为空格,我需要第X个字符为*

我写了以下内容:

int i = 0;
int X = 5;
char spaces[X]; //In this case X is 5 so the array should have indexes 0 - 4
for(i = 0; i < X; i++) {
    spaces[i] = '*'; //I start by setting all 5 char's equal to '*'
    printf("spaces = '%s'\n", spaces); //This was to make sure it ran the correct # of times
}

此细分的输出如下,&#39; gh&#39;每次都不同:

spaces = '*gh'
spaces = '**h'
spaces = '***'
spaces = '****'
spaces = '****'

为什么空格只增加到4而不是5个字符? 不应该有空格[4] =&#39; *&#39 ;;被称为?

将整个字符串设置为等于&#39; *&#39;我运行第二个for循环:

for(i = 0; i < X-1; i++) {
    spaces[i] = ' ';
}

然后应设置除第X个字符等于&#39;之外的所有内容。 &#39;,但由于字符串的行为类似于其唯一的X-1字符长,整个事物被设置为空格,它就像这样出现

spaces = '    ';

4个空格,当我需要4个空格后跟*

2 个答案:

答案 0 :(得分:1)

您缺少字符串终止字符\0,一旦您想使用printf("%s",...)将数组打印为字符串,就需要这样做。 因此,使您的数组比您要打印的项目大一个项目,并使用0初始化它,这样您写入数组的所有内容最后都将是一个有效的字符串。否则,您将产生未定义的行为:

int main (void)
{
#define X 5

    int i = 0;
    char spaces[X+1] = { 0 };
    for(i = 0; i < X; i++) {
        spaces[i] = '*'; 
        printf("spaces = '%s'\n", spaces); 
    }
}

答案 1 :(得分:0)

为了将第一个X-1字符设置为空格而将第X个字符设置为。 这将始终具有''

的最后一个字符
for(i = 0; i < X-1; i++) {
    spaces[i] = ' ';
    spaces[i+1] = '*'; 
    printf("spaces = '%s'\n", spaces); 
}