对指针的引用丢失了

时间:2013-08-24 06:09:00

标签: c

我试图理解为什么这句话不起作用。

char resp[] = "123456789";
void getValue(char *im)
{
   im = resp;
   printf("\n%s\n",im);
}

int main(int argc, char *argv[])
{
    char imei[11] = {0};
    getValue(imei);
    printf("\nIMEI: %s\n",imei);
    return 0;
}

输出:

123456789
IMEI: 

3 个答案:

答案 0 :(得分:3)

您无法使用=进行分配,请改为使用strcpy

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

char resp[] = "123456789";
void getValue(char *im)
{
   im = strcpy(im, resp);
   printf("\n%s\n",im);
}

int main(int argc, char *argv[])
{
    char imei[11] = {0};
    getValue(imei);
    printf("\nIMEI: %s\n",imei);
    return 0;
}

那是因为imei是一个数组[11](不只是一个指针),如果你想通过=进行分配,你可以:

#include <stdio.h>

char resp[] = "123456789";
void getValue(char **im)
{
   *im = resp;
   printf("\n%s\n",*im);
}

int main(int argc, char *argv[])
{
    char *imei; /* Not an array but a pointer */
    getValue(&imei);
    printf("\nIMEI: %s\n",imei);
    return 0;
}

答案 1 :(得分:2)

C按值传递参数。当函数退出时,im的任何变化都会丢失。如果您想保留更改。传递指针的地址。然后你可以改变你传递的地址的指针。

答案 2 :(得分:1)

试试这个:

char resp[] = "123456789";

void getValue(char **im)
{
   *im = resp;
   printf("\n%s\n",*im);
}

您需要将指针传递给指针作为程序参数。