簡體   English   中英

打印char數組結束時出現意外輸出

[英]Unexpected output at the end of printing an array of char

#include <stdio.h>

int main(int argc, const char * argv[]) {
    unsigned char ch,i,letters[95];
    int tapped [0];
    ch=32; //start with 32 (space)

    while(ch<=127){
        ch++;
        letters[i]=ch;
        i++;
    } 
    printf(letters);


    return 0;
}

我試圖將ASCII字符從32到127放入一個數組,以便可以在另一個循環中生成N個隨機字符。

問題是我要退回所有這些,但最后我還要退回一些其他意外的東西:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\200\300\367\277_\377

我不明白為什么最后我會得到\\ 200 \\ 300 \\ 367 \\ 277_ \\ 377,因為它們不在范圍內。 我是C語言的新手,是否有某些方面我做得不好的數組?

首先,如果您計算的字符數是32到127,則其中有96個字符。 所以letters應與被定義letters[96]而不是letters[95]

其次,您不應將letters傳遞給printf作為第一個參數。 第一個參數應該是格式字符串,而不是要從字面上打印的字符串。 特別是,由於letters包含“%”字符,因此它不是正確的格式字符串。

第三,在打印字符串時, printf默認需要以空值結尾的字符串。 要打印不以null結尾的char數組,可以在轉換說明符中使用精度:

printf("%.96s\n", letters);

第四,您說要使所有字符都從32到127,但是循環將ch設置為32開始,並在將其放入數組之前對其進行遞增,因此放入數組的第一個值是33。后來。

第五,您不初始化i 在開始循環之前,必須將其設置為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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