[英]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.