2

文字を文字列に出力する非常に単純なプログラムがありますが、何らかの理由で機能しません。

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

void * print_chars(char *process_string) {
    int i;
    int string_len;

    string_len = strlen(process_string);

    printf("String is %s, and its length is %d", process_string, string_len);

    for(i = 0; i < string_len; i++) {
        printf(process_string[i]);
    }

    printf("\n");
}

int main(void) {
    char *process_string;

    process_string = "This is the parent process.";

    print_chars(process_string);

    return 0;
}

Netbeansで実行すると、次のようになります。

RUN FAILED (exit value 1, total time: 98ms)

行を削除すると

printf(process_string[i]);

プログラムは実行されますが、コンソールには何も出力されません(明らかに)。

私がここで見逃しているアイデアはありますか?

4

3 に答える 3

9

行にフォーマットが必要です

printf(process_string[i]);

すなわち

printf("%c", process_string[i]);
于 2012-11-19T16:09:49.210 に答える
4

いくつかの問題があります。

1つは、からの出力が表示されないことですprintf("String is %s, and its length is %d", ...)。これは、標準出力がデフォルトで行バッファリングされており、改行が含まれていないため、印刷の準備ができている行があると実際に判断されることはないためです。フォーマット文字列を変更してを追加する\nと、このコマンドの出力が表示されます。

char2つ目は、の最初の引数にaを渡すことです。printf()ここで、は。を期待しchar *ます。これにより、その文字をポインタとして解釈しようとするため、クラッシュします。代わりに次のようなものを渡したいと思いprintf(process_string)ます。printf()ただし、一般に、変数文字列を;の最初の引数に直接渡すことはお勧めできません。代わりに、を含むフォーマット文字列を%s渡し、対応する引数として文字列を渡す必要がありますprintf("%s\n", process_string)。または、文字ごとに印刷する場合は、、のprintf("%c", process_string[i])後にaを付けprintf("\n")てバッファーをフラッシュし、実際に出力を確認します。または、文字ごとに実行する場合は、putchar(process_string[i])よりも単純になりprintf()ます。

于 2012-11-19T16:12:55.443 に答える
1

printf()最初のパラメータとして、 charへのポインタを期待します。渡すのはcharであり、1へのポインタではありません。

とにかく、printf()ここで使う機能ではありません。試してみてくださいputc()...

于 2012-11-19T16:10:45.640 に答える