C语言 将字符串的值初始化为函数



我知道我的标题不清楚,使用代码+示例会更清晰。我想初始化一个 char*(主函数中的"motSecret",我的函数中的"mot"),其中包含随机选择到文件中的单词,并将其执行到函数中。此数组使用内存分配进行动态处理。我的函数中的变量初始化得很好,但是当我在退出函数后打印值时,值会发生变化并变成"0@"

以下是主要关注的部分:

int main()
{
    FILE* dico =NULL;
    char *motSecret, *motRes;
    char lettre=' ';
    int check=0, nbCoups=10, longueur=0, nbMots=0;
    Bool erreur = TRUE;
    srand(time(NULL));
    nbMots = scanDico(dico);
    getWord(dico, nbMots, motSecret);
    printf("Mot : %s", motSecret);

问题出现在函数 getWord() 之后。这是这个函数的代码:

void getWord(FILE* dico, int nbLignes, char *mot)
{
    int numMotChoisi=rand() % nbLignes, nbChar=0;
    char charActuel=' ';
    dico = fopen("dico.txt", "r");
    rewind(dico);
    if(dico != NULL)
    {
        while (numMotChoisi > 0)
        {
            charActuel = fgetc(dico);
            if (charActuel == 'n')
                numMotChoisi--;
        }
        charActuel = ' ';
        while(charActuel != 'n')
        {
            charActuel = fgetc(dico);
            nbChar++;
        }
        fseek(dico,-(nbChar)-1,SEEK_CUR);
        mot = malloc(nbChar * sizeof(char));
        if(mot == NULL)
        {
            printf("Probleme d'allocation memoire");
            exit(0);
        }
        fgets(mot, SIZE, dico);
        mot[strlen(mot) - 1] = '';
        printf("Mot = %s ", mot);
    }
    fclose(dico);
}

函数末尾的 printf 返回一个很好的值,而主函数中 getWord() 之后的 printf 表明函数中更改的值尚未"保存"......

其他事情,无需内存分配即可正常工作。

我希望我足够清楚。如果我忘了说些什么,或者你需要更多信息,请告诉我。

C 在函数参数传递中使用pass by value

你需要一个双指针,如果你想在另一个函数中分配内存,就像void getWord(FILE* dico, int nbLignes, char **mot)一样。

作为级联效应,printf("Mot : %s", motSecret); 正在尝试访问未初始化的内存,从而导致未定义的行为。

建议:

  1. 我认为没有理由在getWord()中使用FILE *dico作为参数.在很可能是当地人。

  2. 与其使用双指针,我建议从 getWord() 返回分配的指针,即将void getWord()更改为 char * getWord(),添加return mot并像motSecret = getWord(<params>)一样使用

char *motSecret;

motSecretmain()的局部变量,它不是启动的。

通过调用

getWord(dico, nbMots, motSecret);

您正在将一些未初始化的指针传递给函数getword()

getword()内部,您正在为分配一些内存

char *mot;

并将一些数据写入此内存。

现在不知道这个内存motSecret 您必须将此内存地址返回到未初始化的指针 main()

char *motSecret = getWord(dico, nbMots);

你的getword()应该是这样的,

char *getWord(dico, nbMots);

在执行所有操作之后,在此内部,

return mot;

相关内容

  • 没有找到相关文章

最新更新