我编写了一个简单的方法,从长字符串中获取输入并打印出来。我将数据保存在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进行编译。
答案 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;
}