1

ファイルが存在するかどうかを確認するために次のコードを実行していますが、文字列を stat に渡すと、失敗が返されます。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>

int main ()
{
struct stat statbuf;
char tmp_buf1[100];
char result [100];
char result1[100]="/root/file.sh";
strcpy(tmp_buf1,"echo $HOME/file.sh");
FILE* fp;
fp = popen(tmp_buf1,"r");
printf("Name passed is:%s\n",tmp_buf1);
fread(result,1,sizeof(result),fp);
fclose (fp);
printf("The full path is  %s\n",result);
int rc = 0;

// To find out difference b/w the the strings, I am doing a strcmp, it is returning 10.
int r = strcmp(result,result1);

printf (" Return is = %d\n",r);
rc = stat(result, &statbuf);
if ( rc == -1 ) {
    printf("File is NOT HERE!\n");
    printf("Return Code = %d",rc);
   }
else
    printf("Found it !");
}

これらの文字列が同じではない理由はわかりません。

4

1 に答える 1

3
strcpy(tmp_buf1,"echo $HOME/file.sh");

echo文字列を終了し、改行、ASCIIコード10でエコーします'\n'。これが2つの文字列の違いです。で試してみてください

strcpy(tmp_buf1,"echo -n $HOME/file.sh");

別の注意点として、でFILE*開いたものは、ではなく、popenで閉じる必要があります。pclosefclose

于 2012-09-26T20:16:19.110 に答える