C 编程 - 将未声明的字符串传递给函数(内存分配)

标签 c string memory memory-management

<分区>

我有一个关于将 未声明的字符串 传递给 Function 的问题。

下面的代码编译并正常工作(因为字符串被正确打印)。我试图了解代码如何在内存分配方面工作的细节(编译器是否从“字符串”生成一个临时变量并将其实际传递给函数?)。 p>

通常我会声明一个 char 数组来保存字符串,然后将其传递给函数 - 这在内存分配方面很有意义。

如果按照下面的程序直接传递字符串(例如,一个长时间运行的程序将大量字符串传递给日志 - 每个字符串传递是否创建一些一种新的字符串变量,其内存永远不会被释放等)。

代码 - 在 Visual Studio 2013 中编译

#include <stdio.h>

//Function Declaration
int MyFunction(char *SomeString);


int main(void)
{
    MyFunction("MyString");
    return 0;
}


//Function Code
int MyFunction(char *SomeString) {
    printf("Passed String: %s \n", SomeString);
    return 0;
}

最佳答案

I have a question relating to passing an undeclared String to a Function.

不,您没有在此处传递未声明 字符串。在你的情况下,

  MyFunction("MyString");

"MyString" 被称为一个字符串文字,可以被认为是一个未命名的变量。通常,这驻留在不可修改的内存中。

内存分配由编译器在编译期间自行处理,因此您无需为内存分配和释放部分操心。

关于C 编程 - 将未声明的字符串传递给函数(内存分配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379010/

相关文章:

clang, lto, 防止函数删除

c - 将 4 行字符串放在一起并计算单词数

javascript - 使用 jQuery 的 data() 应该注意什么样的内存泄漏?

PowerShell单行内存使用量巨大

c - 我有一个程序,在 win95 上运行,但没有在 winXP 上编译

c - 如何从 Serial.read() 中检索字符串值;

固定位长度类型的c定义(可移植性)

c++ - 如果用户输入的字符串变量无效,如何重复输入命令-C++

java - 最佳实践/性能 : mixing StringBuilder. 附加 String.concat

c++ - 线程分配的内存块是否与线程本身具有相同的亲缘关系,直到线程退出?