我有一个非常简单的程序来打印字符串中的字符但由于某种原因它不起作用:
#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]);
程序运行但没有任何内容打印到控制台(显然)。
我在这里缺少什么想法?
答案 0 :(得分:9)
你需要一行格式
printf(process_string[i]);
即
printf("%c", process_string[i]);
答案 1 :(得分:4)
有几个问题。
一个是你没有看到printf("String is %s, and its length is %d", ...)
的任何输出。这是因为默认情况下标准输出是行缓冲的,并且您不包括换行符,因此它实际上决定不准备打印行。如果更改格式字符串以添加\n
,您将看到此命令的输出。
第二个是你将char
传递给printf()
的第一个参数,它需要char *
。这会导致它崩溃,因为它试图将该字符解释为指针。您希望传递类似printf(process_string)
的内容。但是,将变量字符串直接传递给printf()
的第一个参数通常是个坏主意。相反,您应该传递包含%s
的格式字符串,并将字符串作为相应的参数传递:printf("%s\n", process_string)
。或者,如果要逐个字符地打印它printf("%c", process_string[i])
,然后是printf("\n")
来刷新缓冲区并实际看到输出。或者,如果您逐字逐句地进行,putchar(process_string[i])
将比printf()
更简单。
答案 2 :(得分:1)
printf()
期望作为第一个参数,指向char 的指针。你传递的是 char ,而不是指向它的指针。
无论如何,printf()
不是这里使用的功能。试试putc()
...