我有一个函数接受一个char指针,如下所示:

void func(char *string);

我希望以这种方式更改传递的char数组:
func(“User”)—>你好,用户!
解决这项任务的更好办法是什么?
选项1;->使用其他字符数组->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 - C在函数中初始化一个字符数组或我应该将其作为参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21577152/

10-11 04:21
查看更多