簡體   English   中英

為什么這個循環在數組的相同索引上返回不同的值或什么都不返回

[英]Why does this cycle returns different value or nothing on same index of array

我希望從帶有隨機索引生成的 array[] 數組中生成一個 6 個字符長的字符串。 有時不同的值被添加到同一個索引上的 str[] 字符串,或者相同的值被添加到字符串但不是來自正確的索引。

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

3 = 29
d = 3
d = 0
y = 24
r = 17
x = 23

其中兩個“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;
}

當您聲明str您需要指定一個足夠大的大小以容納 6 個字符加上一個尾隨空值。

不需要使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM