如何在C中将一组随机大写字母填充为函数?

时间:2012-10-16 05:07:44

标签: c arrays random fill

我正在尝试编写一个函数来用40个随机大写字母填充数组。我试图填充数组并打印它,但我没有得到任何输出。

提前谢谢你。

#include <stdio.h>
#include <stdlib.h>

void fillS1(char y[]);

int main(int argc, const char * argv[])
{
char s1[40];
int n;

fillS1(&s1[40]);

for (n = 0; n < 41; n++) {
    printf("%s", s1);
}


return 0;
}

void fillS1(char y[40]){

int x = 1;

while (x < 41) {
    x = rand() % 26;
    x = 2 + 'A';
    x = y[x];
    x++;
}


}

3 个答案:

答案 0 :(得分:3)

我只想编码

void fill_string_40(char str[])
{
   for (int i=0; i<40; i++)
     str[i] = 'A' + random() % 26;
   str[40] = (char)0;
}

并将其用作(例如在您的main

{ char s[41];
  fill_string_40(s);
  printf("%s\n", s);
}

请注意,对于空终止字符,您需要一个额外的字节。广告我们假设一些ASCII兼容的字符编码。一种更便携的方式可能是

str[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[random() % 26];

因为文字字符串是字符的常量数组。

答案 1 :(得分:2)

试试这个,不要忘记在程序开头的某个地方调用srand(),ONCE。

void fillRand(char ar[], size_t len)
{
    size_t i=0;
    if (0 == len)
        return;

    for (i=0;i<(len-1);++i)
       ar[i] = (rand() % 26) + 'A';
    ar[len-1] = 0;
}       
BTW,完全不便携,因为规范没有要求&#39; A&#39; Z&#39; Z&#39;要么是连续的,要么是连续的,但它可能会对你需要的东西很好。如果需要绝对可移植性,则以下始终工作:

void fillRand(char ar[], size_t len)
{
    static const char a[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    size_t i=0;

    if (0 == len)
        return;

    for (i=0;i<(len-1);++i)
       ar[i] = a[ (rand() % (sizeof(a)-1)) ];
    ar[len-1] = 0;
}       

适用于普通和EBCDIC平台。 (如果你不知道区别,只需使用这个)。

答案 2 :(得分:0)

此外,您应该在调用fillS1()时传递第一个字符的地址。将fillS1(&s1[40]);替换为fillS1(&s1[0]);