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]);

IE

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

有几个问题。

一是您没有看到来自printf("String is %s, and its length is %d", ...). 这是因为标准输出默认是行缓冲的,并且您不包括换行符,因此它实际上永远不会确定有一行可以打印。如果您更改格式字符串以添加一个\n,您将看到此命令的输出。

第二个是您将 a 传递给char的第一个参数printf(),它需要 a char *。这会导致它崩溃,因为它试图将该字符解释为指针。你想通过类似的东西printf(process_string)。但是,将变量字符串直接传递给 ; 的第一个参数通常是个坏主意printf()。相反,您应该传递一个包含 的格式字符串%s,并将该字符串作为相应的参数传入:printf("%s\n", process_string). 或者,如果您想逐个字符地打印它printf("%c", process_string[i]),后跟 aprintf("\n")以刷新缓冲区并实际查看输出。或者,如果您逐个字符地进行操作,putchar(process_string[i])将比printf().

于 2012-11-19T16:12:55.443 回答
1

printf() expects, as first parameter, a pointer to char. What you are passing is a char, not a pointer to one.

Anyway, printf() is not the function to use here. Try putc()...

于 2012-11-19T16:10:45.640 回答