我正在尝试编写一个函数来用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++;
}
}
答案 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]);