如何解决fprintf() 不在文件中打印
我正在尝试在文件中打印一个字符串,但相反。但是 fprintf
不会将其打印到文件中。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <iso646.h>
#include <errno.h>
#include <stddef.h>
#define dim 50
int main(int argc,char const *argv[]) {
FILE *fin;
FILE *fout;
char str[dim];
char nomefilein[dim];
char nomefileout[dim];
int i;
printf("Inserisci il nome del file da leggere:\n");
scanf("%s",nomefilein);
printf("Inserisci il nome del file da scrivere:\n");
scanf("%s",nomefileout);
fin=fopen(nomefilein,"r");
fout=fopen(nomefileout,"w");
while (fgets(str,dim,fin)!=NULL) {
printf("%s",str);
for (i = 49; i > 0; i--) {
fprintf(fout,"%s",str[i]);
}
}
fclose(fin);
return 0;
}
你能帮我吗?
解决方法
-
str[i]
是char
,因此将其传递给%s
会调用未定义行为,并且通常会导致分段错误,因为典型的有效地址需要 1 个以上的时间字节。 - 您应该计算读取的字符串的长度并使用它而不是固定的起点 49。
- 您忘记打印
str[0]
。此外,您可能不希望换行符被反转(置于顶部)。
试试这个,而不是 for (i = 49; i > 0; i--)
循环:
i = strlen(str); /* get the length of string */
if (i > 0) {
i--;
if (i > 0 && str[i] == '\n') i--; /* ignore the last newline character */
for (; i >= 0; i--) { /* use >=,not > */
fputc(str[i],fout); /* you won't need fprintf() to print single character */
}
fputc('\n',fout); /* print newline character at end of line */
}
应添加 #include <string.h>
以使用 strlen()
。
假设您只想反转字符串然后将其打印到任何位置,那么可以使用以下代码轻松完成,假设您知道字符串的长度:
for(int i=0,k=len-1; i<(len/2); i++,k--)
{
temp = str[k];
str[k] = str[i];
str[i] = temp;
}
然后您可以按照通常的方式fprintf
字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。