你好,用户! 解决这个任务的更好方-6ren">
gpt4 book ai didi

C 在函数中初始化一个字符数组,或者我应该将它作为参数传递

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:14 25 4
gpt4 key购买 nike

我有一个函数接受一个字符指针,就像这个:

void func(char *string);

我的愿望是以这种方式改变传递的字符数组:

func("User") -> 你好,用户!

解决这个任务的更好方法是什么?

选项#1; -> 使用另一个 char 数组 -> temp(将声明一次)

void func(char *string, char *temp){
sprintf(temp, "Hello, %s!", string);
}

并在温度后使用。

选项#2; -> 使用 temp 作为局部变量(每次都应该在函数体中声明)

void func(char *string){
char temp[512];
sprintf(temp, "Hello, %s!", string);
sprintf(string, "%s", temp);
// or strcpy(string, temp); string[strlen(temp)]=0;
}

问题是这个函数经常被调用。第二个选项是否会显着降低性能?还有其他选项可以解决这个任务吗?

最佳答案

第一个选项是两者中较好的一个。如果与字符串文字一起使用,第二个将调用未定义的行为,因为您无法覆盖它们。当然无论如何它都没有任何意义,您如何期望恢复被覆盖的文字?

当然,如果输入字符串有缓冲区溢出保护和适当的 const 会更好:

void func(const char *string, char *out, size_t out_max)
{
snprintf(out, out_max, "Hello, %s!", string);
}

大多数系统现在应该有 snprintf()

关于C 在函数中初始化一个字符数组,或者我应该将它作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com