来自C语言中随机字符生成器的奇怪结果

我试图用C编写一个程序,该程序会散出随机字符。按照发现here的说明,我编写了该程序。

rand_int:char

但是,它的行为不符合我的预期。当输入少量字符来生成字符时,例如10,它将产生预期的输出。

我的预期输出是一组

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

对打印到屏幕上。

这是正常操作的一个例子

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

但是,如果我输入一个较大的值(例如100),它将输出非常奇怪的内容,例如:

InAppBrowser

所以问题是,为什么它会这样表现? 有什么更好的方法可以避免这种情况?

xutuzi 回答:来自C语言中随机字符生成器的奇怪结果

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

printf("%d:%c\n",index,misc);

代替

printf("%d:%s\n",&misc);
,

一切都很简单。该程序具有未定义的行为。您正在使用用于输出字符串的格式字符串%s

printf("%d:%s\n",&misc);

但是变量misc不是包含字符串的字符数组。它只是一个字符。因此,函数printf输出变量misc之后的所有字符,直到遇到以零结尾的字符为止。

似乎变量num分配在变量misc旁边。因此,printf调用还会输出变量num的字节,该变量包含值100。如果要输出此值作为ASCII字符存储在字节中,则将得到字符'd'

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    char c = 100;

    putchar( c );
    putchar( '\n' );

    return 0;
}

其输出为

d

在printf调用中使用格式%s而不是格式%c。例如

printf("%d:%c\n",misc);
本文链接:https://www.f2er.com/2908322.html

大家都在问