执行 strlen(const) 的最佳方法是什么?

use*_*723 1 c string constants

我正在创建一个带有一些硬编码参数的 C 程序。(这是设计使然,不用担心。)

//global constants
const char * const USERNAME = "username";
const int USERNAME_LEN = strlen(USERNAME);
Run Code Online (Sandbox Code Playgroud)

当然,这是错误的,因为 strlen 显然不是一个常量。有没有办法做到这一点?或者我应该不关心并直接从 strlen 传递 strncmp 结果?

AnT*_*AnT 5

如果你真的需要你USERNAME作为一个const char * const对象(你吗?),那么一种方法是

#define USERNAME_LITERAL "username"

const char * const USERNAME = USERNAME_LITERAL;
const int USERNAME_LEN = sizeof USERNAME_LITERAL - 1;
Run Code Online (Sandbox Code Playgroud)

它如人们所希望的那样优雅,但确实使代码保持“自我维护”的状态。也就是说,您只需编辑文字,其余部分将自动更新。

你也可以做

const char USERNAME[] = "username";
const int USERNAME_LEN = sizeof USERNAME - 1;
Run Code Online (Sandbox Code Playgroud)

甚至

#define USERNAME "username"
const int USERNAME_LEN = sizeof USERNAME - 1;
Run Code Online (Sandbox Code Playgroud)

但在这种情况下USERNAME不再是const char * const这样,这就是为什么我问你是否真的需要它。