Unix strcmp为什么不';不行?
该程序运行良好。它验证参数是文件还是目录,并返回1或2。然而,Unix strcmp为什么不';不行?,unix,process,popen,strcmp,Unix,Process,Popen,Strcmp,该程序运行良好。它验证参数是文件还是目录,并返回1或2。然而,strcmp不起作用,我不知道为什么 这是我的密码: #定义N 100 int main(int argc,char*argv[]){ 文件*fp; char cmd[N]; 字符结果[N]; int i; 对于(i=1;i变量x还没有值 你的意思是说以下内容吗 if (strcmp(result,"1")==0){ //DO SOMETHING } 除了问题中的变量混淆外,请注意阅读一行文本时尾随
strcmp
不起作用,我不知道为什么
这是我的密码:
#定义N 100
int main(int argc,char*argv[]){
文件*fp;
char cmd[N];
字符结果[N];
int i;
对于(i=1;i变量x
还没有值
你的意思是说以下内容吗
if (strcmp(result,"1")==0){
//DO SOMETHING
}
除了问题中的变量混淆外,请注意阅读一行文本时尾随的换行符会发生什么情况。摘自linux手册页fgets(3):
我写了一个有点像你的小程序:
#include <stdio.h>
main()
{
FILE *fp;
char bigbuf[10*1024];
fp = popen("/bin/echo hello world", "r");
fgets(bigbuf, sizeof bigbuf, fp);
printf("length of bigbuf: %d\nlength of \"hello world\": %d\n", strlen(bigbuf), strlen("hello world"));
exit(0);
}
result
有一个终止换行符,因为它已被fgets()
读取,因此,它将包含“1\n”
(或者可能是“1\r\n”
,尽管这不太可能),这与“1”
不同
可以按如下方式删除换行符:
char *p;
if((p=strchr(result,'\n'))!=0) *p=0;
如果您的输入包含CR,您可以以相同的方式删除它们。请复制并粘贴您的确切代码到问题中。\DEFINE
将是语法错误;拼写为\DEFINE
管道(c2p)什么是c2p?为什么会泄漏?对不起,我忘了删除那个部分是的,我想这就是问题所在,但我不知道如何删除那些字符…为什么它会包含“1\r\n”
而不是“1\n”
?文件补丁“/home/flory/os/verif.sh”
强烈暗示类似UNIX的系统。但即使在Windows上,如果流处于文本模式,任何行尾标记都将自动转换为单个'\n'
字符。@Keith这取决于popen()启动的进程使用的行尾.Unix程序通常使用als行结尾,而Windows程序则使用\r\n。因此,虽然verif.sh听起来像Unix shell脚本,但没有人阻止它生成Windows行结尾。例如,如果verif.sh的输出也将在Windows上使用,则可能会出现这种情况。因此,虽然我不太可能为了完整性而提到\r\n。这是问题。我使用strtok截断到“\n”,现在我的程序正在运行
length of bigbuf: 12
length of "hello world": 11
char *p;
if((p=strchr(result,'\n'))!=0) *p=0;