c - 如何将 char 字符串从另一个函数复制到 main?

标签 c string

我正在尝试使用 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/

相关文章:

c - C 中的文件处理 BST

c - STM32 STM32CubeF4 USB CDC操作

c - 当预处理器处理预处理器行时会发生什么? - '.i' 文件

javascript - 如何使用 jQuery 对字符串进行子字符串化

java - 有字符串 "naveen",希望输出为 "eennav"

定义的字符数组小于初始化字符串

html - 删除(不间断的)字符串中的空格字符

c 多线程

c - 如何从字符串数组中仅获取所需的元素

c++ - C++ 中字符串(不是 std::string)常量的正确习语