gpt4 book ai didi

c - 指向函数中字符串的指针

转载 作者:太空狗 更新时间:2023-10-29 17:27:24 25 4
gpt4 key购买 nike

看来我受困于一些基础知识。有人能解释一下为什么下一个代码:

#include <stdlib.h>void Test1(char *t){    t = (char *)malloc(11);    strcpy(t, "1234567890");}void Test2(char **t){    *t = (char *)malloc(11);    strcpy(*t, "1234567890");}void Test3(char *t){    strcpy(t, "1234567890");}char * Test4(char *t){    t = (char *)malloc(11);    strcpy(t, "1234567890");    return t;}int main(){    char *t1 = NULL;    Test1(t1);    printf("\nTest1: %s\n", t1);    char *t2 = NULL;    Test2(&t2);    printf("\nTest2: %s\n", t2);    char *t3 = (char *)malloc(11);    Test3(t3);    printf("\nTest3: %s\n", t3);    char *t4 = NULL;    t4 = Test4(t4);    printf("\nTest4: %s\n", t4);    return 0;}

给出这个输出:

Test1: (null)Test2: 1234567890Test3: 1234567890Test4: 1234567890

Test1 函数有什么问题?为什么与 Test1 几乎相似的 Test4 有效?更一般的问题:在函数中创建字符串并返回指向它的指针的正确方法是什么?

最佳答案

函数参数并不像您想象的那样起作用。您通过“值”而不是“引用”传递值,这意味着一旦进入函数内部,对这些值的任何更改仅对该函数是本地的,因此当函数退出时,本地更改将被丢弃。

要解决这个问题,要么传入指向指针的指针 (char** t),要么通过引用传递指针 (char&*) 并更改函数代码以匹配。

关于c - 指向函数中字符串的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4626543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com