【问题标题】:issue in file handling in c [closed]c中的文件处理问题[关闭]
【发布时间】:2018-01-23 12:56:56
【问题描述】:

您好,我正在尝试从文件中读取两个字符,并希望将其以十六进制形式发送到 uint8_t*。 代码:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int file_handling();

int main() 
{
   uint8_t *output ;

   output=file_handling() ;

   printf("\noutput_main -->  %02x",output);

}

int file_handling()
{ 
    uint8_t *output_hand ;

    char c;

    FILE *f_gets = fopen("filename", "r");
    if(f_gets==NULL)
    {
       printf("Please point to a valid key file!\n");
       fclose(f_gets);  
       return 0;
    }
    char str[3];

    if( fgets (str, 3, f_gets)!=NULL ) 
    {
     /* writing content to stdout */
      puts(str);
      output_hand = (uint8_t *)(str); 
      puts(output_hand);    
      printf("\noutput %s --- %02x --> size --> %lu",str,*output_hand,sizeof(*output_hand));
    }
    fclose(f_gets);

    return *output_hand;
}

下面是输出

we we

output we --- 77 --> size --> 1 output_main -->  65

我能理解的是 77 是 w 的 ascii 而 65 是 e 的 ascii

但我想在 uint8_t *output 中输入我认为是十六进制的“我们” 哪里有问题 在 main 中,如果我使用指针“*output=file_handling()”而不是仅输出,则会出现分段错误。

如何从文件中读取值并将其放入 uint8_t ,其中文件具有十六进制字符,fget 如何将其识别为十六进制或字符。

谢谢

文件是一个文本文件

ab
fe
ea
ce
1d

基本上 uint8_t *输出; *输出= 0xFA; 有用 但我想从上面的文件中读取并将其放入输出变量中

【问题讨论】:

  • 您为 Sam 编写的代码有很多问题(可能有六处左右)。也许最好向我们展示文件中的内容以及您希望输出的内容的示例,然后我们可以从那里开始工作。
  • 文件包含十六进制字符
  • 这并不能真正回答问题。您只是想从文件中读取数据并将其打印到屏幕上吗?您是否试图以某种方式操纵数据?如果您只是想打印字符而不是它的十进制值,请使用%c 而不是%s(顺便说一句,这是错误的,因为一些其他问题指出了其中一些问题程序员老兄)。
  • @jszakmeister 该文件只包含字符,我想读取它们并将其放入 uint8_t *输出为十六进制值,首先我不知道如何打印 uint8_t,其次 unint8_t 将包含 1 个字节十六进制字符是两个字符,所以我想一次从文件中读取两个字符。
  • “但我想输入“我们”,我认为它是一个十六进制”什么是“一个十六进制”?它是一个两个字母的字符串。如果您想从 ASCII 转换为整数,请查阅您的初级 C 编程书籍。

标签: c file-handling uint8t


【解决方案1】:

你有很多问题,这里是其中三个:

  • 您将str 定义为由两个字符组成的数组,这意味着它只能包含单个字符串。然后你打电话给fgets 告诉它str 它有三个 个字符,这意味着它可以并且将会写出你的数组的边界。

  • 您已声明 file_handling 以返回 int 值。您返回数组string 中的第一个字符,并将其分配给main 函数中的指针 变量output。然后将此 指针 视为单个 int 值。

  • main 函数中,您传递指针 output,但将其打印为int 值。格式说明符和参数不匹配。

第一个和第三个问题导致undefined behavior

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多