C String在一个函数中是正确的,并在另一个函数中转储垃圾

时间:2011-05-10 13:19:48

标签: c string

这是我的代码

#include <stdio.h>

void abc(char *text);

int main(void)
{
    char text[20];
    abc(text);
    printf("text in main : %s\n",text);
    return 0;
}

void abc(char *text)
{
    text = "abc";
    printf("text in abc function : %s\n",text);
}

这是输出。

text in abc function : abc
text in main : ฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬ๑ป ๚

我的问题是:

  1. 为什么main函数和abc函数中的text变量不一样?
  2. 我尝试更改为在scanf函数中使用abc并且它有效!有相同的。为什么?
  3. 如何修改代码以使其正常工作。我的意思是问题1,主要功能和abc功能是一样的吗?

2 个答案:

答案 0 :(得分:13)

调用该函数时:

 abc(text);

指针text的副本,该指针是函数abc()中使用的指针。所以当你说:

text = "abc";

您要更改副本,而不是main中的副本。

此外,您通常不能在C中分配字符串 - 您必须使用像strcpy()这样的库函数。要使代码正常工作,您需要更改:

 text = "abc";

为:

 strcpy( text, "abc" );

答案 1 :(得分:-3)

你不能只是printf("text in main : %s\n",text);它在C中没有任何意义,你可以使用像strcpy()这样的函数来获取每个字符,将它们组织成 String < / em> !或者定期循环并在阵列上运行它并且没有空间打印器官。

int i;
for (i=0 ; i<strlength(text);i++)
{
    printf ("%d",text[i]);
}