C语言中字节数组到字符数组的转换

C语言中字节数组到字符数组的转换,c,C,因此,我从.img文件逐字节读取,如下所示: void print_img_section(FILE * f, int start, long int size, char * target_file_name) { unsigned char list[size]; fseek(f, start, 0); if (fread(list, 1, size, f) <= 0) { fprintf(stderr, "problems reading d

因此,我从
.img
文件逐字节读取,如下所示:

void print_img_section(FILE * f, int start, long int size, char * target_file_name)
{
    unsigned char list[size];

    fseek(f, start, 0);
    if (fread(list, 1, size, f) <= 0) {
        fprintf(stderr, "problems reading directory from image\n");
        exit(1);
    }
}
是的,
fread()
void*
作为第一个参数,因此您可以简单地将
list
声明为
char list[size]然后使用strcmp()

但要执行此操作,您需要终止
'\0'
列表,如下所示

void
print_img_section(FILE *f, int start, long int size, char *target_file_name)
{
    unsigned char list[size + 1];
    size_t readsize;

    fseek(f, start, 0);
    if ((readsize = fread(list, 1, size, f)) <= 0) {
        fprintf(stderr, "problems reading directory from image\n");
        exit(1);
    } else {
        list[readsize] = '\0';
        if (strcmp(list, target_file_name) == 0) {
            fprintf(stdout, "they match!\n");
        } 
    }
}
void
打印部分(文件*f,整数开始,长整数大小,字符*目标文件名)
{
无符号字符列表[size+1];
大小\u t读取大小;
fseek(f,start,0);

如果((readsize=fread(list,1,size,f))您的意思是
list
包含一个字节十六进制表示的字符串吗?如果不是,这是不清楚的:
char
和byte在C中是同义词。
target\u file\u name
的内容是什么?它指向什么?它指向一个单独字节的数组吗(类似于
list
)还是字符串?首先,欢迎来到#c,我们通常不是一个友好的群体,对此表示抱歉,请继续,这是一个美妙的体验:)字节和字符在c中是相同的。您确定要将字符数组“target#file_name”与uchar数组“list”的内容进行比较吗?此外,没有任何内容是“以十六进制存储”的@DusteD:事实上,问题的中位数票数似乎低于零。对于新手来说,用C语言编程是相当困难的。非常感谢他们对帮助男生的兴趣。@Iharob Al-Asimi有下面的解决方案。我认为假设
target\u file\u name
或该文件不包含任何空字符是不安全的?@Groo这是合理的可以假设
target\u file\u name
是一个字符串,因此有1个且只有1个空字符,即使OP的措辞不精确。对于
list[readsize]='\0';
list
至少有1个空字符。额外的空字符不会导致意外的
strcmp()
result.@chux:我不确定OP是否明白这一点,它不仅仅是一个名称不正确的参数。我也不知道
.img
文件结构,所以我也不知道他从文件中读到了什么,只是想提一下
strcmp
@Iharob Al-Asimi的问题,非常感谢!我一直被困在在那一段时间里,我甚至没有意识到解决办法会这么简单,哈哈哈!
void
print_img_section(FILE *f, int start, long int size, char *target_file_name)
{
    unsigned char list[size + 1];
    size_t readsize;

    fseek(f, start, 0);
    if ((readsize = fread(list, 1, size, f)) <= 0) {
        fprintf(stderr, "problems reading directory from image\n");
        exit(1);
    } else {
        list[readsize] = '\0';
        if (strcmp(list, target_file_name) == 0) {
            fprintf(stdout, "they match!\n");
        } 
    }
}