这是我的例子的文字:
从标准输入加载数字N然后加载N个单词。这个词不超过100个字符。动态分配加载的单词数组作为一系列指向字符串的指针(动态数组需要具有类型
char **
)。提供一组单词打印的单词,单词之间有空格。
有人可以告诉我如何设置角色限制吗?
我应该这样做:
scanf("%100s", str[i])
或其他什么?
顺便说一句,我如何为这样的类型(char **
,int **
等)分配内存?
这是我已完成的代码,所以我做错了什么?
int main()
{
int i,n;
printf("How much words? "), scanf("%d", &n);
char *str= (char *)malloc(n*sizeof(char *));
for(i = 0; i < n; i++)
{
str[i] = malloc(100 * sizeof(char *));
printf("%d. word: ", i + 1),scanf("%s", str[i]);
}
for (i = 0; i < n; i++)
{
printf("%s ", str[i]);
}
getch();
答案 0 :(得分:1)
指针数组的类型错误
// char *str
char **str
使用注释进行代码清理。
// add void
int main(void) {
int i,n;
// Easier to understand if on 2 lines-of code
printf("How much words? ");
// test scanf() results
if (scanf("%d", &n) != 1) return -1;
// Consider different style to allocate memory, as well as type change
// char *str= (char *)malloc(n*sizeof(char *));
char **str= malloc(sizeof *str * n);
// check allocation
assert(str == NULL);
for(i = 0; i < n; i++) {
str[i] = malloc(sizeof *str[i] * 100);
// check allocation
assert(str[i] == NULL);
printf("%d. word: ", i + 1);
fflush(stdout);
// limit input width to 99
// test scanf() results
if (scanf("%99s", str[i]) != 1) return -1;
}
for (i = 0; i < n; i++) {
// Add () to clearly show beginning/end of string
printf("(%s) ", str[i]);
}
getch();
}