我有結構
typedef struct StructString {
void **string;
ringinfo RingInfo; // now i dont use it
} StructString;
我用它
StructString str;
現在我嘗試str.string隨機賦予我的價值
int n = 1 rand() % 30;
printf("%d\n", n);
str.string = RandomInput(str.string, n);
printf("%s\n", *(char **)str.string);
printf("%d\n", strlen(str.string));
RandomInput 函式在這里
void **RandomInput(void **s, const int n) {
int i;
s = malloc((n 1) * sizeof(void *));
for (i = 0; i < n; i) {
char c=rand()%128;
printf("%c ", c);
s[i]=&c;
printf("%d ", i);
printf("%c\n", *(char *)s[i]);
}
s[n]='\n';
return s;
}
我有兩個問題:
- 有時有“”字符(使用截圖)
str.string不是它應該是的(我們可以使用螢屏截圖來理解它應該是什么)
請幫幫我,我不明白
uj5u.com熱心網友回復:
- 由于可列印的 ascii 字符介于 0x20(空白)和 0x7e(tilda)之間,您可以使用
rand() % ('~' - ' ' 1) ' '或隨機選擇一個rand() % 95 32。 - 如果沒有具體原因,最好將字串的資料型別定義為
char *,而不是void **。否則,分配的字符序列可能在字符之間有間隙。 - 您需要
s使用空字符而不是換行符來終止字串。
然后重寫的代碼將如下所示:
#include <stdio.h>
#include <stdlib.h>
typedef struct StructString {
char *string;
// ringinfo RingInfo; // now i dont use it
} StructString;
char *RandomInput(char *s, const int n)
{
int i;
s = malloc((n 1) * sizeof(char)); // strictly we should check the return value
for (i = 0; i < n; i) {
char c = rand() % ('~' - ' ' 1) ' ';
// pick a printable character between ' ' and '~'
printf("%c ", c);
s[i] = c;
printf("%d ", i);
printf("%c\n", s[i]);
}
s[n] = '\0';
return s;
}
int main()
{
StructString str;
int n = 1 rand() % 30;
printf("%d\n", n);
str.string = RandomInput(str.string, n);
printf("%s\n", str.string);
printf("%d\n", strlen(str.string));
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440253.html
標籤:C
上一篇:假設2002年3月24日是星期三,用c撰寫代碼,找出從1801年1月1日到2000年12月31日每月的第五個星期五有多少個星期五?
