C char数组打印为字符串错误,接受空终止?

时间:2014-03-06 03:39:27

标签: c arrays printf

我编写了一个简单的方法,从长字符串中获取输入并打印出来。我将数据保存在char数组中,并尝试将所述数组的最后一个元素设置为'\ 0'以进行空终止,以便我可以printf(%s,array)。

#include <stdio.h>
#define MAX 9
#define DEBUG 1
int QUIT = 0;
int assignNewBoard(void);

void main (int argc, char *argv[]) {
  assignNewBoard();

  }

int assignNewBoard(void) {
  int row,col , count=0,maxCount=(MAX*MAX);
  char ch;
  char input[maxCount+MAX]; //our buffer with room for overflow.
                            //Hopefully never more than 90chars.

  while((ch = fgetc(stdin)) != '\n') {
    //input checks
    if(feof(stdin)){
      if(DEBUG) printf("Finished!\n");
      QUIT = 1;
    }

    count++;
    input[count] = ch;
  }

  if(DEBUG)printf("::");

  input[count+1] = '\0'; //null termination for printing.
  printf("%s\n",input);//This doesn't seem to happen at all in output!

  if(DEBUG) printf("We got %d count!\n", count);

  return 0;
}

但是上面的代码不会将我的char数组作为字符串打印出来!只需在:: in console中打印空! 那么我在这里做错了什么?我在代码中的某个时刻就像这样工作,但现在它不是,甚至不是简化文件!

运行时,它应该有一行“:: :(输入)”,但该行只是“::”而是。

我正在使用GCC进行编译。

2 个答案:

答案 0 :(得分:4)

在对其进行任何操作之前先增加count,因此您阅读的第一个字符会进入input[1]。数组索引从C中的0开始;数组中第一个字符input[0]的值是垃圾,因此您获得的输出可能会不时变化。 (行为未定义)。

你还应该特别检查count永远不会变得如此之大以至于你在缓冲区的末尾运行。如果确实发生了这种情况,那么它可能会导致程序在其他地方崩溃,并且这些错误很难调试。

答案 1 :(得分:2)

你为什么要这么做..你可以这样做。扫描字符串直到\ n并打印出来。

#include<stdio.h>
    int main(){
        char str[90];
        scanf("%[^\n]",str);
        printf("%s",str);
        return 0;
    }