C Linux中的免费新行条件检查

C Linux中的免费新行条件检查,c,C,目前我正在使用 程序收到信号SIGABRT,中止 if(dup != NULL || dup[0] != '\0') { free(dup); } 我在这里遇到了一个问题,在dup包含'\n'的地方,它会尝试释放它并给我分段错误。我不想对dup进行硬编码的'\n'条件检查,我只想释放dup变量,如果它不是NULL,但如果它包含'\n',则它失败并给我分段错误。您的逻辑在这里不正确: if(dup != NULL || dup

目前我正在使用 程序收到信号SIGABRT,中止

if(dup != NULL || dup[0] != '\0') {
    free(dup);                               
}

我在这里遇到了一个问题,在dup包含
'\n'
的地方,它会尝试释放它并给我分段错误。我不想对dup进行硬编码的
'\n'
条件检查,我只想释放dup变量,如果它不是
NULL
,但如果它包含
'\n'
,则它失败并给我分段错误。

您的逻辑在这里不正确:

if(dup != NULL || dup[0] != '\0') {
应该是:

if(dup != NULL && dup[0] != '\0') {

否则,您将尝试取消引用空指针。

什么类型是
dup
?你不能释放一个
字符
dup
必须是指针(
'\n'
不是指针)。显示更多相关代码。您喜欢
SEGFAULT
s吗?如果
dup==NULL
您取消对
dup[0]
的引用。坏主意。而且,我怀疑你在做一些相当危险的事情。空字符串比通配符指针更可取,两者都与
NULL
-指针不同。不要因为字符串为空就释放它。释放它,因为您确定它不再在任何地方使用。您只想在指针指向堆内存时使用
Free
。另外,您需要将
|
更改为
&