【发布时间】:2011-02-10 08:57:16
【问题描述】:
我正在使用宏,我认为它可以正常工作 -
#define CStrNullLastNL(str) {char* nl=strrchr(str,'\n');如果(nl){*nl=0;}}所以它可以将字符串中的最后一个换行符归零,实际上它用于在 fgets 保留它时切断换行符。
所以,我想知道我是否可以从宏中“返回”一个值,以便可以像这样调用它
func(CStrNullLastNL(cstr));或者我必须写一个函数
【问题讨论】:
-
你不必写任何一个 - 只需使用
strtok(str, "\n")。虽然它不是strtok()真正设计的用途,但它完美地完成了工作(事实上,它是strtok()的少数好用途之一)。在 C++ 中,您应该只使用std::getline()而不是fgets()。 -
你希望它返回什么?
-
@Jerry Coffin:这不会替换第一个换行符而不是最后一个换行符吗?
-
@Fred:
fgets只读取一行,因此第一行也是最后一行(并且始终是字符串中的最后一个字符,如果存在的话)。如果你在一些完全不同的情况下使用,你可能有多个,那么是的,它会从第一个停止。 -
如果您知道
\n是字符串的最后一个字符或不存在,那么您不需要比strlen()更高级的东西。
标签: c++ macros return-value