【发布时间】:2018-08-16 12:24:03
【问题描述】:
有没有办法在不预先分配缓冲区的情况下连接字符串?
考虑以下几点:
int main()
{
char buf1[] = "world!";
char buf2[100] = "hello ";
char * p = "hello ";
// printf("%s", strcat(p, buf1)); // UB
printf("%s", strcat(buf2, buf1)); // correct way to use strcat
return 0;
}
如果我有一个指针作为字符串的前缀,我必须先将它复制到缓冲区,然后再复制到strcat() 吗?是否有任何隐含的功能?
我想到的唯一选项是strcat() 和sprintf(),它们都需要缓冲区。
- 对于一个需要一个字符串的函数,我需要它,并且我希望有一些接近 Python
str1 + str2语法的东西
【问题讨论】:
-
如果您需要存储连接的字符串以供以后处理,您将需要一个缓冲区。如果您只想打印串联的字符串
"%s%s", p, buf1应该这样做。 -
介于两者之间...我需要将它作为一个字符串传递给非
printf函数 -
...那么你需要一个中间缓冲区。
-
请记住,C 中没有像 Python、C++ 或其他语言那样的“字符串”类型
-
Python 很可能开始为该行生成大量代码,很可能使用字符串类和堆分配。那么您是在问如何最有效地做到这一点(在速度或内存方面?),或者如何以一种使源代码看起来很漂亮但机器代码看起来很糟糕的方式做到这一点?