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