#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”在每一行中都为空。
通过a = malloc(2*sizeof(char));
in函数void doSth(char *a)
,可以在函数a
范围内修改的本地副本,但不能超出其范围。如果要修改myString
,则应将指向myString
(&myString
)的指针赋予该函数。称为通过指针传递:
char *myString;
doSth(&myString);
该函数的原型相应地进行了更改:
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
来修改a
main中的值)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句