#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;
}
我试图将32到127的ASCII字符转换成数组,这样我就可以在另一个循环中生成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
默认需要以空字符结尾的字符串。要打印非空终止的char
数组,可以在转换说明符中使用精度:
printf("%.96s\n", letters);
第四,你说你想要所有的字符从32到127,但你的循环开始时ch
设置为32并在将它放入数组之前递增它,所以放入数组的第一个值是33.你应该将增量添加到后来。
第五,你没有初始化i
。在开始循环之前必须将其设置为零。