[英]C char array printing as string error with accepting null termination?
我編寫了一個簡單的方法,該方法從長字符串中獲取輸入並進行打印。 我將數據保存在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數組打印為字符串! 在控制台::后面僅打印為空! 那我在做什么錯呢? 我在代碼中的某一時刻使它像這樣工作,但現在卻不是,甚至在簡化文件中也是如此!
運行時,該行應帶有“::( input)”行,但該行只是“ ::”。
我正在使用GCC進行編譯。
您在對count
進行任何操作之前先對其進行遞增,因此所讀取的第一個字符將input[1]
。 數組索引從C中的0
開始; 數組中第一個字符的值input[0]
是垃圾,因此您獲得的輸出可能會不時變化。 (行為是不確定的)。
您還應該專門檢查count
永遠不會太大,以至於耗盡緩沖區的末尾。 如果發生這種情況,則可能會導致您的程序在其他地方崩潰,並且這些錯誤可能很難調試。
為什么要這樣做。.您可以簡單地這樣做。 掃描字符串直到\\ n並打印。
#include<stdio.h>
int main(){
char str[90];
scanf("%[^\n]",str);
printf("%s",str);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.