【发布时间】:2013-04-07 21:07:24
【问题描述】:
定义:
- CHAR_BACKSLASH 定义为 '\\' 或 0x5C
变量:
- workingDir 是一个 C 字符串
-
myFilePath 是一个 C 字符串
int len = strlen(workingDir); char lastChar = workingDir[len - 1];
在下面,myFilePath 由 workingDir + 反斜杠 + 文字 "myfile.txt" 组成/p>
在三元参数中,如果还没有反斜杠,我会尝试添加反斜杠。
snprintf(myFilePath,
sizeof(myFilePath),
"%s%s%s",
workingDir,
(lastChar == CHAR_BACKSLASH) ? "" : "\\",
"myfile.txt");
如果可能,我想将其更改为类似的内容,但不确定如何更改,因为它需要一个空的单引号字符,我不确定是否允许这样做。
snprintf(myFilePath,
sizeof(myFilePath),
"%s%c%s",
workingDir,
(lastChar == CHAR_BACKSLASH) ? '' : CHAR_BACKSLASH,
"myfile.txt");
【问题讨论】:
-
第一种情况更清楚地说明意图是什么。最后一种情况不太清楚,而且很可能 snprintf 在处理字符方面只比长度为 1 的字符串稍微快一点。这种优化不值得缺乏可读性。
-
如果为了清楚起见我将其更改为使用“\\”而不是所有情况下的十六进制代码会怎样?
-
你说得很好。为了清楚起见,我将其更改为使用定义(CHAR_BACKSLASH),而不是反斜杠的十六进制代码
标签: c ternary-operator