【问题标题】:Why is not this array of arrays being printed correctly in C?为什么在 C 中不能正确打印这个数组?
【发布时间】:2021-12-25 18:32:24
【问题描述】:

我已经在下面的代码上工作了一段时间,但由于某种原因,在返回数组并在主函数中使用它后,我无法正确打印出数组的字符数组。 我想不出任何其他可以在代码中打印的东西来检查问题所在。我确实检查了论坛中的其他类似帖子,但我找不到那里给出的答案与我的代码编写方式之间的任何差异。 有人发现有什么不对吗?

非常感谢。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STRING 35

char **getWordsList(size_t *wordsNumber);

int main(){
    int wordsNumber;
    char **arrayOfArrays=getWordsList(&wordsNumber);
    printf("WordsNumber is %d",wordsNumber);
    printf("\nPrinting the resulting array of arrays: \n");
    
    for (size_t indx=0; indx<wordsNumber; indx++){
        printf("%s ", *(arrayOfArrays+indx)); //WHY ISNT THE STRING PRINTED CORRECTLY ?
    
        }
    free(*arrayOfArrays);
    free(arrayOfArrays);
    return 0;
}

char **getWordsList(size_t *wordsNumber){
    printf("Please enter the number of words: ");
    scanf("%zu",wordsNumber);
    fflush(stdin);
    char **wordsList=malloc(sizeof (char *)*(*wordsNumber));
    
    if (wordsList!=NULL){
    for (size_t indx=0; indx<*wordsNumber; indx++)
        {
            char inputWord [30];
            printf("Please enter a word: ");
            fgets(inputWord,sizeof(inputWord),stdin);
            fflush(stdin);
            printf("Word is %s",inputWord);
            
            *(wordsList+indx)=malloc(MAX_STRING*sizeof(char));
            if (*(wordsList+indx)){
                *(wordsList+indx)=inputWord;
                printf("Added array component is: %s\n",*(wordsList+indx));
                }
        }
        
    return wordsList;}
    
    else{
        printf("Error in allocating memory for array of arrays");
        }
    }

【问题讨论】:

  • 它在打印什么?您希望它打印什么?
  • @Oriol 这个声明 *(wordsList+indx)=inputWord;产生内存泄漏,退出函数后也有未定义的行为。:)
  • @Shawn。我想用这个打印数组的每个字符数组: printf("%s ", *(arrayOfArrays+indx));
  • *(wordsList+indx)... 大多数人会使用wordsList[indx]。而fflush(stdin) 是未定义的。
  • @VladfromMoscow。然后使用 strcpy 来解决问题?

标签: arrays c


【解决方案1】:

感谢我从帖子 cmets 获得的帮助,我能够生成一个工作代码。我发布它是为了让其他遇到类似问题的人可以从中受益。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STRING 35

char **getWordsList(size_t *wordsNumber);

int main(){
    int wordsNumber;
    
    char **answer=getWordsList(&wordsNumber);
    printf("WordsNumber is %d",wordsNumber);
    printf("\nChecking: \n");
    
    for (size_t indx=0; indx<wordsNumber; indx++){
        printf("%s ", answer[indx]);
        free(answer[indx]);
        }
    free(answer);   
    return 0;
}

char **getWordsList(size_t *wordsNumber){
    long wordsNumberFoo;
    char wordsNumberStr [40];
    char *wordsNumberPtr;
    
    printf("Please enter the number of words: ");
    fgets(wordsNumberStr, sizeof(wordsNumberStr), stdin);
    wordsNumberFoo=strtol(wordsNumberStr, &wordsNumberPtr, 10);
    *wordsNumber=(size_t)wordsNumberFoo;
    
    char **wordsList=malloc(sizeof (char *)*(*wordsNumber));
    
    if (wordsList!=NULL){
    for (size_t indx=0; indx<*wordsNumber; indx++)
        {
            char inputWord [30];
            printf("Please enter a word: ");
            fgets(inputWord,sizeof(inputWord),stdin);
            inputWord[strcspn(inputWord, "\n")] = 0;
            printf("Word is %s\n",inputWord);
            
            strncpy(*(wordsList+indx),inputWord, MAX_STRING);
            printf("Added array component is: %s\n",*(wordsList+indx));
        }
        
    return wordsList;}
    
    else{
        printf("Error in allocating memory");
        return NULL;

        }
    }
    

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 2021-04-13
    • 2023-04-07
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多