按地址C更改字符串值

时间:2017-04-25 13:32:46

标签: c string

我试图通过将其地址传递给函数来更改字符串的值。 结果我得到了NULL。我尝试了strcpy,但它不适用于字符串上的指针。

代码:

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

void changeStr (char ** tmpP){
    char* test="Hello world !";
    char** add=&test;
    tmpP=add;


    }

int main()   {

    char* tmp;
    changeStr(&tmp);
    printf("\n %s \n",tmp);


     return 0;


     }

结果:

  

(NULL)

2 个答案:

答案 0 :(得分:1)

目前您的代码的行为是未定义,因为changeStr是无操作的,并且您尝试使用未初始化的printf >变量tmp。这说明了你的(任意)输出。在其他情况下,编译器可能会吃掉你的猫。

add具有自动存储持续时间,tmpP是来自调用者的&tmp值复制的结果。这些赋值虽然完全有效,但对调用函数main()不可见。

解决方案是写

*tmpP = "Hello World";

作为changeStr中的唯一语句。

您应该注意tmp中的main()将指向只读字符串文字。

答案 1 :(得分:0)

您所做的是错误,tmpP=add;您认为add值将指向tmpP

如果要更改传递给function的字符串的值,可以这样做。我看到已经 @Bathseba 指出了。

试试这个,

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

void changeStr (char ** tmpP){
    char* test;
    char** add=&test;
    *tmpP= "Hello world !";
}

int main()   {
    /* Here it has string cruel that pass to function*/
    char* tmp="Cruel";
    changeStr(&tmp);
    printf("\n %s \n",tmp);

    return 0;
}

<强>输出:

Hello world !

你做了什么。

void changeStr (char ** tmpP){
    char* test = "Hello world !";
    char** add=&test;
    tmpP=add; //<-- Here your assigning add to tmpP, it shouldn't.
}