fprintf 练习工作但 txt 在 运行 后无效
fprintf exercise working but the txt is not valid after running
我遇到了一个问题,我不知道该怎么做。我有这个任务要求我从一个文件中取出单词(比方说 input.txt)并以相反的顺序将它们全部写入另一个文件(比方说 output.txt)。有趣的是,当我执行我的程序时(我有我大学给我的 Xubuntu 虚拟机)无法双击 output.txt 文件,因为出了点问题:我会尝试翻译它:
"Byte sequence invalid in the conversion's input"
有趣的是,如果我这样做 "gedit output.txt" 我确实看到这些词都写得很好,所以我会说我的程序 "works but corrupts the file"。这背后的理论原因是什么?如果你想帮我指出它们,这里有一个 link 到我的代码 [编辑,看来我不能 post pastebin link。这是涉及输出文件的部分]:
`char *t=malloc(sizeof(char)*1025), *tmp;
t=fgets(t,1024,fp);
while(t!=NULL){
tmp=strtok(t, " ");
while(tmp!=NULL){
tmp=strrev(tmp);
fprintf(fo, " %s", tmp);
tmp=strtok(NULL, " ");
}
t=fgets(t,1024,fp);
}`
我希望我没有违反任何规则,因为我还是这个网站的新手,谢谢大家!
看来你的代码本身没有问题。
你能测试一下,看看你的问题是否又来了吗?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *strrev(char *str)
{
int i = 0;
int j = strlen(str) - 1;
while (i < j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
++i;
--j;
}
return (str);
}
#define BUFFER_LEN 1024
int main(int argc, char* argv[])
{
char line[BUFFER_LEN + 1];
FILE *fp = NULL;
FILE *fo = NULL;
if (argc != 3 && argc != 4) {
fprintf(stderr, "Devi usare 2 o 3 argomenti grz\n");
return -1;
}
if (!(fp = fopen(argv[1],"r"))) { //argv1=input.txt
fprintf(stderr, "Devi \n");
return -1;
}
if (!(fo = fopen(argv[2], (argc == 4 && strcmp(argv[3],"a")) ? "a" : "w"))) {
fprintf(stderr, " 3 argomenti grz\n");
return -1;
}
while(fgets(line, BUFFER_LEN, fp)) {
for (char *word = strtok(line, " "); word; word = strtok(NULL, " ")) {
fprintf(fo, "%s ", strrev(word));
}
}
fclose(fp);
fclose(fo);
return 0;
}
你能编译 & 运行 这段代码并说明 "mousepad" 是否还在迷失自我吗?
int main(int argc, char* argv[])
{
FILE *fo = NULL;
if (argc != 3 && argc != 4) {
fprintf(stderr, "Devi usare 2 o 3 argomenti grz\n");
return -1;
}
if (!(fo = fopen(argv[2], "w"))) {
fprintf(stderr, " 3 argomenti grz\n");
return -1;
}
fprintf(fo, "test");
fclose(fo);
return 0;
}
我遇到了一个问题,我不知道该怎么做。我有这个任务要求我从一个文件中取出单词(比方说 input.txt)并以相反的顺序将它们全部写入另一个文件(比方说 output.txt)。有趣的是,当我执行我的程序时(我有我大学给我的 Xubuntu 虚拟机)无法双击 output.txt 文件,因为出了点问题:我会尝试翻译它: "Byte sequence invalid in the conversion's input"
有趣的是,如果我这样做 "gedit output.txt" 我确实看到这些词都写得很好,所以我会说我的程序 "works but corrupts the file"。这背后的理论原因是什么?如果你想帮我指出它们,这里有一个 link 到我的代码 [编辑,看来我不能 post pastebin link。这是涉及输出文件的部分]:
`char *t=malloc(sizeof(char)*1025), *tmp;
t=fgets(t,1024,fp);
while(t!=NULL){
tmp=strtok(t, " ");
while(tmp!=NULL){
tmp=strrev(tmp);
fprintf(fo, " %s", tmp);
tmp=strtok(NULL, " ");
}
t=fgets(t,1024,fp);
}`
我希望我没有违反任何规则,因为我还是这个网站的新手,谢谢大家!
看来你的代码本身没有问题。
你能测试一下,看看你的问题是否又来了吗?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *strrev(char *str)
{
int i = 0;
int j = strlen(str) - 1;
while (i < j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
++i;
--j;
}
return (str);
}
#define BUFFER_LEN 1024
int main(int argc, char* argv[])
{
char line[BUFFER_LEN + 1];
FILE *fp = NULL;
FILE *fo = NULL;
if (argc != 3 && argc != 4) {
fprintf(stderr, "Devi usare 2 o 3 argomenti grz\n");
return -1;
}
if (!(fp = fopen(argv[1],"r"))) { //argv1=input.txt
fprintf(stderr, "Devi \n");
return -1;
}
if (!(fo = fopen(argv[2], (argc == 4 && strcmp(argv[3],"a")) ? "a" : "w"))) {
fprintf(stderr, " 3 argomenti grz\n");
return -1;
}
while(fgets(line, BUFFER_LEN, fp)) {
for (char *word = strtok(line, " "); word; word = strtok(NULL, " ")) {
fprintf(fo, "%s ", strrev(word));
}
}
fclose(fp);
fclose(fo);
return 0;
}
你能编译 & 运行 这段代码并说明 "mousepad" 是否还在迷失自我吗?
int main(int argc, char* argv[])
{
FILE *fo = NULL;
if (argc != 3 && argc != 4) {
fprintf(stderr, "Devi usare 2 o 3 argomenti grz\n");
return -1;
}
if (!(fo = fopen(argv[2], "w"))) {
fprintf(stderr, " 3 argomenti grz\n");
return -1;
}
fprintf(fo, "test");
fclose(fo);
return 0;
}