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

发布于 2024-11-06 08:26:57 字数 607 浏览 0 评论 0原文

这是我的代码

#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函数中的text变量和abc函数中的text变量不一样?
  2. 我尝试更改为在 abc 函数中使用 scanf 并且它有效!有相同的。为什么?
  3. 如何修改代码使其工作。我的意思是,从问题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:

  1. Why is the text variable in the main function and in the abc function is not the same?
  2. I try to change to use scanf in the abc function and it works! there are the same. Why?
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

日裸衫吸 2024-11-13 08:26:57

当您调用该函数时:

 abc(text);

会生成指针 text 的副本,并且该指针是函数 abc() 中使用的指针。因此,当您说:

text = "abc";

您正在更改副本,而不是 main 中的副本时。

另外,通常不能在 C 中分配字符串 - 您必须使用诸如 strcpy() 之类的库函数。为了使您的代码正常工作,您需要将: 更改

 text = "abc";

为:

 strcpy( text, "abc" );

When you call the function:

 abc(text);

a copy of the pointer text is made, and this pointer is the one used in the function abc(). So that when you say:

text = "abc";

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:

 text = "abc";

to:

 strcpy( text, "abc" );
落墨 2024-11-13 08:26:57

你不能只是 printf("text in main : %s\n",text); 它在 C 中没有任何意义,你也可以使用像 strcpy() 这样的函数code> 接受每个字符并将它们组织成一个字符串!或常规的 for 循环并在整个数组上运行它并打印器官而不留空间。

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

You can't just printf("text in main : %s\n",text); it has no meaning in C, you either can use a function like strcpy() 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.

int i;
for (i=0 ; i<strlength(text);i++)
{
    printf ("%d",text[i]);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文