#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的新手,所以阵列的某些方面我做得不好吗?
答案 0 :(得分:4)
首先,如果您将字符数从32计算到127,则其中有96个。因此,letters[96]
应使用letters[95]
定义,而不是letters
。
其次,您不应将printf
作为第一个参数传递给letters
。第一个参数应该是格式字符串,而不是字面打印的字符串。特别是,由于printf
包含“%”字符,因此它不是正确的格式字符串。
第三,在打印字符串时,char
默认需要以空字符结尾的字符串。要打印非空终止的printf("%.96s\n", letters);
数组,可以在转换说明符中使用精度:
ch
第四,你说你想要所有的字符从32到127,但是你的循环开始于i
设置为32并在将它放入数组之前递增它,所以放入数组的第一个值是33你应该把增量推迟到以后。
第五,你没有初始化 struct mydata o {
string MY_STRING;
int MY_INT;
};
。在开始循环之前必须将其设置为零。