gpt4 book ai didi

c - 从文件中读取时,我得到特殊字符,这些字符不在我的文本文件中

转载 作者:太空宇宙 更新时间:2023-11-04 07:09:18 25 4
gpt4 key购买 nike

首先,我不知道这是否与我的操作系统有关,因为我使用的是 OSx。当运行我的程序并打印出我从文本文件中读取的内容时,我得到以下信息:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z\353`\232\377

我正在阅读我使用 text wrangler 创建的新文本文档,我什至打开了 invisibles 以确保文件末尾没有任何内容。我用来从文本文件中读取的代码在这里:

// Parses text from file, then passes parsed text to writeAndEncode for writing          and encryption. 
int encode(char *fileRead, char *fileWrite) {

// Get the file
FILE *fileToRead = fopen(fileRead, "r+"); // Open file for reading
char *textWithinFile;

// Check if the file can be read
if (fileRead != NULL) {
// File can be read.

// Get length of file
fseek(fileToRead, 0L, SEEK_END);
size_t size = (size_t)ftell(fileToRead);
rewind(fileToRead);
// Make sure no error in finding size of file.
if (size != -1) {
long charSize = sizeof(char);
textWithinFile = malloc(sizeof(char) + size);
// Add text from fileToRead to char array
fread(textWithinFile, charSize, size, fileToRead);
// Add null at end to make file string
textWithinFile[size] = '\0';
printf("%s\n", &textWithinFile[0]);
fclose(fileToRead); // Debugging to find out what is being read

writeAndEncode(size, textWithinFile, fileWrite);
free(textWithinFile);
} else {
//File Can't be read
printf("***ERROR_FILE_TO_READ_SIZE_CAN_NOT_BE_FOUND***\n");
}
} else {
printf("***ERROR_FILE_TO_READ_CAN_NOT_BE_READ***\n");
}

return 0;
}

如果我在 Windows 上,我会遇到同样的问题吗?

无论如何感谢您的帮助!

最佳答案

我稍微修正了您的代码并添加了一些调试语句。它将输入文件的内容保存到 size=(charSize*filesize+1)malloc 缓冲区中,+1 位来保存空终止字符。它可以在我的机器上使用大小合理的二进制文件运行

您可以取消注释 printf(buffer_copy) 语句以获取您之前所做的事情。否则,它现在将遍历缓冲区中的每个字节并输出为它的十六进制等价物。如果您仍然得到那个“垃圾”,那么它只是您输入文件的一部分,而不是错误。

//get the file
FILE *infp=fopen(infile,"r");
if(infp!=NULL){
//get length of file
fseek(infp,0L,SEEK_END);
size_t filesize=(size_t)ftell(infp);
printf("file length = %d\n",(int)filesize); //debug statement
rewind(infp);
if(filesize>0){
char * buffer;
buffer=(char*)malloc((sizeof(char)*filesize)+1); // +1 for null char at the end
size_t chars_read=fread(buffer,sizeof(char),filesize,infp);
printf("chars read = %d\n",(int)chars_read); // debug statement (chars_read should equal filesize)
buffer[filesize]='\0'; // properly terminate the char array
fclose(infp);
//output what you read (method 1, print string)
//char *buffer_copy=buffer;
//printf("the file=\"%s\"",buffer_copy); //uncomment these two statement to do what you did before */
//output what you read (method 2, byte-by-byte)
if(chars_read>0){
int i;
for(i=0;i<chars_read;i++){
char the_char = *buffer;
printf("char%d=%02x\n",i,the_char); //output each byte as hexadecimal equivalent
buffer++;
}
} else { printf "problem with fread"; }
} else { printf("problem with filesize"); }
else { printf("problem opening the file"); }

while 循环将在第一个空终止字符处停止读取。 for 循环现在将读取文件中的每个字节(以防您试图查看不一定是 .txt 的内容,例如 。 jpg)


您是否尝试过从命令行检查文件以确保它只包含您期望的字符?

例如,通过运行命令 od -c 将每个字节视为其 ASCII 等效项(或八进制,如果不可打印)。

关于c - 从文件中读取时,我得到特殊字符,这些字符不在我的文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com