簡體   English   中英

C系統無法運行世界

[英]C System can't run hello world

誰能告訴我為什么shell hello world命令的這種簡單C system調用無法正常工作:

MWE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main( int argc, char *argv[] )
{
   char *str;

   str = strdup ( "hello" );
   printf ( "echo %s\n", str );
   system ( ( "echo %s\n", str ) );

   return 0;
}

輸出:

回聲你好

sh:1:您好:找不到

這不會按照您認為的那樣做:

   system ( ( "echo %s\n", str ) );

逗號運算符僅返回第二個值str ,即"hello" 因此,您的程序將不會嘗試運行echo hello而只會運行hello

您將要使用sprintf將整個命令寫入緩沖區,然后執行。

該行:

system ( ( "echo %s\n", str ) );

嘗試運行系統命令"hello" ,這自然不是有效命令。

這是因為您使用的是comma-operator ,它僅采用最右邊參數的值。 在這種情況下,最右邊是str ,它是字符串"hello"的指針。

(在對system的調用中,左側參數"echo %s\\n"被忽略了)


假設您打算致電:

system("echo hello");

您需要執行以下操作:

char *str;
char outstring[100] = {0};

str = strdup ( "hello" );
sprintf (outstring, "echo %s\n", str);
system (outstring);

sprintf行將構建字符串"echo hello\\n" ,並將其放入outstring
然后, system調用將執行該命令。

(請注意,我將outstring的大小設置為固定大小100。這是不安全的,如果您的sprintf應該生成更多的輸出,但這是出於演示目的最簡單的操作)

提示:

  • system() (或帶有%字符串文字)不執行%替換,如printf
  • 雙括號使逗號成為逗號運算符,產生正確的自變量( str ),而不是兩個自變量。 C不是Python :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM