gpt4 book ai didi

无法通过 strcpy 从参数复制到 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:08 24 4
gpt4 key购买 nike

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

void doSth(char *a)
{
char *b,*c;
b = malloc(2*sizeof(char));
b[0]='a';
b[1]='\0';

a = malloc(2*sizeof(char));
c = malloc(2*sizeof(char));
strcpy(a,b);
strcpy(c,b);

printf("c:%s\n",c);
free(c);
free(b);
}


int main()
{
char *myString;

doSth(myString);

printf("%s\n",myString);

free(myString);
return 0;
}

这个程序只输出“c:a”。为什么我不能将 b 复制到 a?根据调试器,变量“a”在每一行中都保持为空。

最佳答案

通过在函数 void doSth(char *a) 中执行 a = malloc(2*sizeof(char));a< 的本地副本 在函数范围内修改,但不在函数范围外。如果您希望修改 myString,则应将指向 myString (&myString) 的指针提供给该函数。它被称为通过指针传递:

char *myString;

doSth(&myString);

函数的原型(prototype)相应地改变了:

void doSth(char **a){
...
*a = malloc(2*sizeof(char));
strcpy(*a,b);
...
}

同理,就是int a=1;printf("%d",a);(printf只是需要a的值),但是 int a;scanf("%d",&a);(scanf 需要指向 a 的指针,以修改main中a的值)。

关于无法通过 strcpy 从参数复制到 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189083/

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