我正在尝试编写一个函数以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++;
}
}
我只想编码
void fill_string_40(char str[])
{
for (int i=0; i<40; i++)
str[i] = 'A' + random() % 26;
str[40] = (char)0; // (char)0 is equal to use '\0'
}
并用作(例如,在main
中使用]
{ char s[41];
fill_string_40(s);
printf("%s\n", s);
}
注意,空终止符需要额外的字节。广告我们假设一些ASCII兼容的char编码。一种更便携的方式可以是
str[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[random() % 26];
因为文字字符串是字符的常量数组。
尝试一下,别忘了在程序的开头(一次)调用srand()。
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,完全不是可移植的,因为规范不要求'A'..'Z'是连续的或连续的,但是它可能会很好地满足您的需求。如果需要绝对的可移植性,那么以下将始终起作用:
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平台上工作。 (如果您不知道区别,请使用此选项。)
此外,在调用fillS1()
时,您应该传递第一个字符的地址。将fillS1(&s1[40]);
替换为fillS1(&s1[0]);