Arrays 为什么这个循环在数组的同一索引上返回不同的值或什么都不返回

Arrays 为什么这个循环在数组的同一索引上返回不同的值或什么都不返回,arrays,c,random,Arrays,C,Random,我希望通过随机索引生成从数组[]数组生成一个六个字符长的字符串。有时不同的值会添加到同一索引上的str[]字符串中,或者相同的值会添加到字符串中,但不会从正确的索引中添加 例如(程序生成的内容): 其中两个“d”的索引都应为3 其他例子: z = 25 b = 1 o = 14 = 2 d = 3 4 = 30 其中,索引2应返回“c”,但不返回任何内容。因此只生成一个5字符长的字符串 int main() { char array[] = {'a', 'b', 'c', 'd', '

我希望通过随机索引生成从数组[]数组生成一个六个字符长的字符串。有时不同的值会添加到同一索引上的str[]字符串中,或者相同的值会添加到字符串中,但不会从正确的索引中添加

例如(程序生成的内容):

其中两个“d”的索引都应为3

其他例子:

z = 25
b = 1
o = 14
= 2
d = 3
4 = 30
其中,索引2应返回“c”,但不返回任何内容。因此只生成一个5字符长的字符串

int main()
{
    char array[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r','s', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_'};

    char str[] = "";

    srand(time(0));
    for(int i = 0; i < 6; i++)
    {
         int k = (rand() % sizeof(array));
         char c = array[k];
         printf("%c = %d \n", c, k);
         strncat(str, &c, 1);
    }

    printf("%s", str);

    return 0;
}
intmain()
{
字符数组[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','uu'};
字符str[]=“”;
srand(时间(0));
对于(int i=0;i<6;i++)
{
int k=(rand()%sizeof(数组));
字符c=数组[k];
printf(“%c=%d\n”,c,k);
strncat(str和c,1);
}
printf(“%s”,str);
返回0;
}

当您声明
str
时,您需要指定一个足以容纳6个字符的大小加上尾随的null

无需使用
strcat()
分配单个字符,只需分配
str[i]=c
strncat()
如果给空终止符指定的限制短于源字符串,则它也不会添加空终止符,因此在这样的循环中使用它是不合适的

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

#define SIZE 6

int main()
{
    char array[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r','s', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_'};
    char str[SIZE+1];

    srand(time(0));
    int i;
    for(i = 0; i < 6; i++)
    {
         int k = (rand() % sizeof(array));
         char c = array[k];
         printf("%c = %d \n", c, k);
         str[i] = c;
    }
    str[i] = '\0'; // Add null terminator

    printf("%s", str);

    return 0;
}
#包括
#包括
#定义尺寸6
int main()
{
字符数组[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','uu'};
字符str[SIZE+1];
srand(时间(0));
int i;
对于(i=0;i<6;i++)
{
int k=(rand()%sizeof(数组));
字符c=数组[k];
printf(“%c=%d\n”,c,k);
str[i]=c;
}
str[i]='\0';//添加空终止符
printf(“%s”,str);
返回0;
}

您在
str
数组中只分配了1个元素。没有足够的空间让你将任何东西连接到它。快来吧。还有,这里有问题吗?这里不要使用sterncat,只需索引到正确分配的输出
#include <stdio.h>
#include <stdlib.h>

#define SIZE 6

int main()
{
    char array[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r','s', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_'};
    char str[SIZE+1];

    srand(time(0));
    int i;
    for(i = 0; i < 6; i++)
    {
         int k = (rand() % sizeof(array));
         char c = array[k];
         printf("%c = %d \n", c, k);
         str[i] = c;
    }
    str[i] = '\0'; // Add null terminator

    printf("%s", str);

    return 0;
}