C编程初学者 - 请解释这个错误

时间:2012-05-09 17:28:39

标签: c arrays

我刚刚开始使用C并尝试了Ritchie的书中的几个例子。我写了一个小程序来理解字符数组,但偶然发现了一些错误,希望对我所理解的错误有所了解:

#include <stdio.h>
#define ARRAYSIZE 50
#include <string.h>

main () {
  int c,i;
  char letter[ARRAYSIZE];
  i=0;
  while ((c=getchar()) != EOF )
  {    
    letter[i]=c;
    i++;
  }
  letter[i]='\0';
  printf("You entered %d characters\n",i);
  printf("The word is ");

  printf("%s\n",letter);
  printf("The length of string is %d",strlen(letter));
  printf("Splitting the string into chars..\n");
  int j=0;
  for (j=0;j++;(j<=strlen(letter)))
    printf("The letter is %d\n",letter[j]);
}

输出结果为:

$ ./a.out 
hello how are youYou entered 17 characters
The word is hello how are you
The length of string is 17Splitting the string into chars..

发生了什么事?为什么for循环没有给出任何输出?

5 个答案:

答案 0 :(得分:11)

语法应为;

for (j=0; j<strlen(letter); j++)

由于strlen是costy操作,并且你没有修改循环内的字符串,所以写得更好:

const int len = strlen(letter);
for (j=0; j<=len; j++)

此外,强烈建议在使用C字符串和用户输入时始终检查缓冲区溢出:

while ((c=getchar()) != EOF && i < ARRAYSIZE - 1)

答案 1 :(得分:7)

错误在for中,只需交换结束条件和增量,如下所示:

for (j = 0; j <= strlen(letter); j++)

问题:最后一个角色是什么?

答案 2 :(得分:4)

for (j=0;j++;(j<=strlen(letter)))这不正确。

它应该是for (j=0; j<=strlen(letter); j++) - 在第三个位置递增。

答案 3 :(得分:3)

for循环的正确格式为:

for (initialization_expression; loop_condition; increment_expression){
    // statements
}

所以你的for循环应该是

for (j = 0; j < strlen(letter); j++)

答案 4 :(得分:2)

在for循环中,条件是i ++,第一次计算结果为false(0)。您需要交换它们:for (j=0; j <= strlen(letter); j++)