簡體   English   中英

C字符數組打印為字符串錯誤並接受空終止?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM