我正在尝试使用 strcpy 将 char 类型函数中的 char 复制到 main 函数中的 var,但程序总是给我一个随机值作为返回值,程序已完成。代码中是否遗漏了一些语法错误,或者可能是另一种执行此复制的方法?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char text()
{
char palavra1[]= "tata";
return palavra1;
}
char main()
{
char saida[50];
strcpy(saida,text()); // this line is supposed to copy the string from text to the var saida
printf("%s", saida);
return 0;
}
最佳答案
在函数 text()
中,palavra1
存储在 test()
的栈帧中,所以当你返回string 并回到main
的栈帧,palavra1
占用的内存不再被编译器保留,可以并且将会被调用main中的其他函数覆盖.要解决此问题,您有两种选择,要么让 text
的调用者提供一个指针来存储字符串,要么让 text
malloc()
字符串的一些内存并返回它,依赖于调用函数在完成时释放它。就个人而言,我建议使用第一种方法,因为这意味着您不必担心在完成后释放
指针,但这确实是您的选择。
此外,您的函数返回类型都是错误的。 text()
应该返回一个 char*
,您应该希望从您的编译器那里得到一个警告。最后,main()
在 ISO 标准中指定为 int main(void)
或 int main(int argc, char** argv)
。偏离这两个签名中的任何一个通常都是不好的做法。
关于c - 如何将 char 字符串从另一个函数复制到 main?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48615327/