如何遍历字符串的每个字符?

时间:2015-03-14 22:37:58

标签: c

我想要做的是将一个名称作为输出文件,然后从我想要将每个字符一次fprintf到输出文件中的字符串。

#include <stdio.h>

int main(void){
char* outputName;
char* input;
printf("Type in the name of the output file: ");
scanf("%s",outputName);
FILE *outputFile = fopen(outputName , "w");
printf("type something: ");
scanf("%s", input);
int i;
for( i = 0; i < sizeof(input)/sizeof(input[0]) ; i++ ){
     fprintf(outputFile,"%c" ,input[i]);
   }
   fclose(outputFile);
   return 0;
}

当我运行它时询问输出文件名然后它崩溃了。我究竟做错了什么?

顺便说一句,我对C来说是全新的。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

sizeof(input)/sizeof(input[0])因为input是一个指针而不能在这里工作,所以sizeof(input)只会给出指针的大小,而不是指向的数组的大小。

使用strlen,它计算空终止符之前的字符数:

for( i = 0; i < strlen(input) ; i++ ){

顺便说一下,你也忘了为inputoutputName分配内存。解决它:

char outputName[n];
char input[n];

其中n是一个幻数,表示可以存储在C字符串中的字符数,包括终止空字符。

请注意,这种方法(使用数组而不是指针)使sizeof(input)/sizeof(input[0])按预期工作。

答案 1 :(得分:1)

char* outputNamechar* input只是指针,不指向任何有效的内存。

相反,你应该有一个字符数组,你可以存储你的角色。

示例:

char outputName[100];
char input[100];