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 : ฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬ๑ป ๚
我的问题是:
- 为什么main函数中的text变量和abc函数中的text变量不一样?
- 我尝试更改为在
abc
函数中使用scanf
并且它有效!有相同的。为什么? - 如何修改代码使其工作。我的意思是,从问题1来看,make main函数和abc函数是相同的吗?
This is my code
#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);
}
And this is output.
text in abc function : abc
text in main : ฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬ๑ป ๚
My questions are:
- Why is the text variable in the main function and in the
abc
function is not the same? - I try to change to use
scanf
in theabc
function and it works! there are the same. Why? - How to modify the code to make it work. I means from question1 that make main function and in abc function are the same?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您调用该函数时:
会生成指针
text
的副本,并且该指针是函数abc()
中使用的指针。因此,当您说:您正在更改副本,而不是
main
中的副本时。另外,通常不能在 C 中分配字符串 - 您必须使用诸如
strcpy()
之类的库函数。为了使您的代码正常工作,您需要将: 更改为:
When you call the function:
a copy of the pointer
text
is made, and this pointer is the one used in the functionabc()
. So that when you say:you are changing the copy, not the one back in
main
.Also, you cannot in general assign strings in C - you have to use library functions like
strcpy()
instead. To make your code work, you need to change:to:
你不能只是
printf("text in main : %s\n",text);
它在 C 中没有任何意义,你也可以使用像strcpy()
这样的函数code> 接受每个字符并将它们组织成一个字符串!或常规的 for 循环并在整个数组上运行它并打印器官而不留空间。You can't just
printf("text in main : %s\n",text);
it has no meaning in C, you either can use a function likestrcpy()
that takes each char and organize them to be a String ! or a regular for loop and run it all over the array and print organs without space.