C struct 函数返回值输出错误 [duplicate]

C struct Function return value output error [duplicate]

提问人:Duncan 提问时间:12/20/2022 更新时间:12/20/2022 访问量:23

问:

我正在用 C 语言练习字符串,我正在发布一个问题,因为我得到了一个不需要的结果。

我按 123、456、789 的顺序保存了字符串,但 //这里的输出是 789,789, 789。

如果您能指出错误的部分,我将不胜感激。

感谢您的阅读。

#include <stdio.h>
#include <stdlib.h>

typedef struct Que
{
    char *s;
    int t;
} QUE;
QUE que[50];
int wp;
void push(char *s)
{
    que[wp].s = s;
    printf("que[wp].s = %s\n",que[wp].s);
    wp++;
}

int cnt = 0;

char * input(char *str)
{
    static char arr[3];
    
    if(cnt == 0)
    {
        arr[0] = '1';
        arr[1] = '2';
        arr[2] = '3';
    }
    else if(cnt==1)
    {
        arr[0] = '4';
        arr[1] = '5';
        arr[2] = '6';
    }
    else if(cnt==2)
    {
        arr[0] = '7';
        arr[1] = '8';
        arr[2] = '9';
    }
    
    cnt++;
    
    return arr;
}


void Temp()
{   
    char *a = "123";
    
    for(int i=0; i<3; i++)
    {
        char *Nchk = malloc(sizeof(char)*3);
        
        Nchk = input(a);
        printf("Nchk = %s\n",Nchk);
        push(Nchk);
        free(Nchk);
    }

    // Here...!!
    printf("%s\n",que[0].s);
    printf("%s\n",que[1].s);
    printf("%s\n",que[2].s);
}


int main(void){
    int ans = -1;
    Temp();
    return 0;
}

这里。。。! 我还期望队列值为 123、456、789。

c 字符串 malloc 字符

评论

0赞 Gerhardh 12/20/2022
欢迎来到 SO。代码中没有任何字符串,但 除外。C 语言中的字符串是以 nul 结尾的字符序列。您错过了终止,也错过了终止的记忆"123"
0赞 Gerhardh 12/20/2022
您的调用会导致内存泄漏,因为您丢弃了下一行中的地址。也许您想将结果复制到该内存中?mallocinput
0赞 Gerhardh 12/20/2022
函数中的数组在内存中仅存在一次。所有队列元素都指向同一数组。因此,您只能看到最后存储的内容。arrinput
0赞 Lundin 12/20/2022
我已经链接了两个重复项。第一个告诉您如何复制字符串。第二个告诉你什么是字符串。但是,我强烈建议您阅读 C 书中的“字符串”一章,并在它之前阅读有关指针的一章。
0赞 Duncan 12/21/2022
Gerhardh,Lundin,感谢您的回复。我按照你的建议理解了。谢谢。

答: 暂无答案