【发布时间】:2020-04-09 16:25:21
【问题描述】:
我正在尝试用 C 语言编写一个吐出随机字符的程序。按照我找到here的说明,我编写了这个程序。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srandom((unsigned) time(NULL));
printf("Tests various aspects of random\n");
char misc;
int num, index;
printf("Enter number of chars: ");
scanf("%d", &num);
printf("\n");
for (int i = 0; i < num; i++) {
index = random() % 26;
misc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[index];
printf("%d:%s\n", index, &misc);
}
}
但是,它的行为不像我预期的那样。当输入少量字符以生成(例如 10 个)时,它会产生预期的输出。
我的预期输出是一组
rand_int:char
成对打印到屏幕上。
这里是一个正常操作的例子
Tests various aspects of random
Enter number of chars:
7:H
4:E
23:X
2:C
4:E
17:R
22:W
11:L
9:J
4:E
但是,如果我输入一个很大的值,比如 100,它会输出非常奇怪的东西,比如:
Tests various aspects of random
Enter number of chars:
18:Sd
3:Dd
21:Vd
10:Kd
19:Td
19:Td
14:Od
7:Hd
15:Pd
22:Wd
24:Yd
22:Wd
12:Md
[rest omitted for brevity...]
所以问题是,为什么它会这样? 有什么更好的方法可以避免这种情况?
【问题讨论】:
-
printf("%d:%s\n", index, &misc);->printf("%d:%c\n", index, misc); -
misc是char,而不是字符串。使用%s打印它是在调用未定义的行为。 -
除了我之外的任何人都认为这应该因为简单的印刷错误而关闭?
标签: c random char printf undefined-behavior