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

时间:2015-03-21 23:04:33

标签: c arrays pointers

#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;
}

该程序仅输出&#34; c:a&#34;。 为什么我不能将b复制到?根据调试器,变量&#34; a&#34;每一行都是空的。

1 个答案:

答案 0 :(得分:4)

通过在函数a = malloc(2*sizeof(char));中执行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需要一个指针{ {1}},修改主要内容中a的值。