【发布时间】:2010-02-23 23:44:54
【问题描述】:
我正在尝试在 C 中实现 perl 的 chomp() 函数的等效版本,我遇到了一个极端情况,其中作为参数传递的字符串文字会导致分段错误(理所当然)。
例如chomp("some literal string\n");
C99 中是否有定义的方法来检测我的函数是否传递了字符串文字,这样我就可以 return 而不尝试将其 NUL 出来?
char* chomp(char *s)
{
char *temp = s;
if (s && *s)
{
s += strlen(s) - 1;
if (*s == '\n')
{
*s = '\0';
}
}
return temp;
}
【问题讨论】:
-
奇数。您的编译器不应该阻止字符串文字作为未声明为
const char *的参数传入吗? -
@Adam Maras:标准没有要求。但是,尝试修改相同的是UB。
-
Adam Maras:在纯 C 中,字符串文字的类型为
char *,而不是const char *。