我正在尝试创建一个包含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个空格后跟*
。
答案 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);
}