C中随机字符生成器的奇怪结果

Rav*_*ing 1 c random printf char undefined-behavior

我正在尝试用 C 编写一个程序,它会吐出随机字符。按照我在这里找到的说明,我编写了这个程序。

#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);
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,它的行为并不像我预期的那样。当输入少量字符来生成时,比如 10,它会产生预期的输出。

我的预期输出是一组

rand_int:char
Run Code Online (Sandbox Code Playgroud)

对打印到屏幕上。

这是正常操作的示例

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
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入一个很大的值,比如 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...]
Run Code Online (Sandbox Code Playgroud)

那么问题来了,它为什么会这样呢?避免这种情况的更好方法是什么?

Rav*_*ing 5

Jabberwocky 和 ​​Federico klez Culloca 的评论是正确的。我试图将字符打印为字符串。这是错误的,并做了奇怪的事情。我需要使用:

printf("%d:%c\n", index, misc);
Run Code Online (Sandbox Code Playgroud)

代替

printf("%d:%s\n", index, &misc);
Run Code Online (Sandbox Code Playgroud)