我想要做的是将一个名称作为输出文件,然后从我想要将每个字符一次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来说是全新的。 任何帮助表示赞赏。
答案 0 :(得分:2)
sizeof(input)/sizeof(input[0])
因为input
是一个指针而不能在这里工作,所以sizeof(input)
只会给出指针的大小,而不是指向的数组的大小。
使用strlen
,它计算空终止符之前的字符数:
for( i = 0; i < strlen(input) ; i++ ){
顺便说一下,你也忘了为input
和outputName
分配内存。解决它:
char outputName[n];
char input[n];
其中n
是一个幻数,表示可以存储在C字符串中的字符数,包括终止空字符。
请注意,这种方法(使用数组而不是指针)使sizeof(input)/sizeof(input[0])
按预期工作。
答案 1 :(得分:1)
char* outputName
和char* input
只是指针,不指向任何有效的内存。
相反,你应该有一个字符数组,你可以存储你的角色。
示例:
char outputName[100];
char input[100];