动态分配char **

时间:2016-01-04 18:25:34

标签: c arrays pointers

这是我的例子的文字:

  

从标准输入加载数字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();

1 个答案:

答案 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();
}