1

こんにちは、C プログラムに小さな問題があります。

#include<stdio.h>

int main ( int argc, char **argv )
{
    char buff[120];
    char text;

    printf("Enter your name: ");
    gets(buff);
    text = sprintf(buff, "echo StrText=\"%s\" > spk.vbs");
    system(text);
    system("echo set ObjVoice=CreateObject(\"SAPI.SpVoice\") >> spk.vbs");
    system("echo ObjVoice.Speak StrText >> spk.vbs");
    system("start spk.vbs");
    return 0;
}

ユーザーから入力を取得して system() 関数に適用するにはどうすればよいですか? 私は C が初めてで、主にバッチ コーダーです。一部のアプリケーションを C に移植しようとしています。システム関数を使用せずにこのアプリケーションを作成するように誰か教えてもらえますか?

前もって感謝します。

4

2 に答える 2

0

これをインクルードに追加します:

#include <string.h>

に変更char text;してくださいchar text[120];- 単一の文字ではなく、配列でなければなりません

gets次に、次のように置き換えfgetsます。

fgets(buff, sizeof(buff), stdin); /* for sizeof(buff) to work buff and fgets must be in the same scope */

buff[strlen(buff) - 1] = '\0'; /* this will trim the newline character for you */

最後に、目的に合わせてフォーマットtextした後に渡します(おそらく次のようなものです):system

sprintf(text, "echo StrText=\"%s\" > spk.vbs", buff);

これはあなたが探しているものですか?

注: 呼び出しにも含める必要があり#include <stdlib.h>ますsystem。常に警告付きでコンパイルしてください ( gcc -Wall -WextraLinux を使用している場合)。警告が表示されます。

これはあなたが必要とするものですか?

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

int main ( int argc, char **argv )
{
    char buff[120];
    char text[120];

    printf("Enter your command: ");

    fgets(buff, sizeof(buff), stdin);

    buff[strlen(buff) - 1] = '\0'; /* get rid of the newline characters */

    sprintf(text, "echo StrText=\"%s\" > spk.vbs", buff);

    system(text);

    return 0;
}
于 2013-07-13T08:48:37.347 に答える
0

取得は非推奨です。代わりに fgets を使用してください。

#include<stdio.h>                                                                                                                                                                                                                    

int main ( int argc, char **argv )
{
    char inputBuf[120];
    char cmdBuf[200];

    printf("Enter your name: ");
    fgets(inputBuf , sizeof( inputBuf) - 1 , stdin );
    sprintf(cmdBuf, "echo StrText=\"%s\" > spk.vbs" , inputBuf );
    system(cmdBuf);
    return 0;
}
于 2013-07-13T08:51:30.160 に答える