[英]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.