|
1
1
我知道您只处理程序中声明的字符串:
而不是使用您分配的文本缓冲区
无论如何,在最后删除\0时,我会三思而后行:您将失去与C标准库函数的兼容性。 除非您要为库重写任何单个字符串函数(例如sprintf),否则您确定要这样做吗? |
|
|
2
1
这非常糟糕,但您可以显式指定每个字符数组常量的长度:
|
|
|
3
0
我记不起细节了,但当我记得的时候
几乎总是最好将这类事情留给编译器,让它为您处理optmization,除非有很好的理由这样做。 |
|
|
4
0
任何 在处理字符串的标准库函数中,可以忽略NUL终止字节。
不
用所需的空间声明“不完全是C字符串”;
|
|
|
5
0
事实上,这只是在你的记忆力真的很差的情况下。 否则我不建议这样做。
string1_constant_name "str1"
string2_constant_name "str2"
...
const char string1_constant[4] = "str1";
由于固定的自动生成数组,现在您有了两个未终止的字符串,并且每个变量都有sizeof()。这个解决方案似乎可以接受。 利益 缺点 需要在每个模块中包含所有此类字符串常量(包括以保持sizeof()已知)。因此,只有当链接器合并了这些符号(有些没有)时,这才有意义。 |
|
|
6
0
|
|
|
7
0
这个问题使用了错误的假设——它假设存储长度(例如,通过将其作为数字隐式传递给函数)不会产生开销,但事实并非如此。 虽然可以通过不存储0字节(或wchar)来节省空间,但大小必须存储在某个位置,并且示例提示它作为常量参数传递给某个函数,这几乎肯定会在代码中占用更多空间。如果同一字符串被多次使用,则开销是每次使用,而不是每次字符串。
|
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
MysteryMoose · GCC下故意忽略初始化器警告中的过量元素 1 年前 |
|
|
Ken P · 如何利用[*]printf格式类型规范警告? 1 年前 |
|
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 1 年前 |
|
|
adversarr · 全局变量何时导出到可执行文件? 1 年前 |