防止在c中的文件中写入字符

防止在c中的文件中写入字符,c,pointers,strncmp,C,Pointers,Strncmp,我正试图用c写一个程序来写出一些字符串,单词,字符等等。。。该程序的要点是允许写入所有内容,但是程序的前两个字节不能包含字符“MZ”。我不熟悉c和指针,以下是我尝试过的: 方法1:这给了我编译错误 else if (offset == 0L){ │ write_fil

我正试图用c写一个程序来写出一些字符串,单词,字符等等。。。该程序的要点是允许写入所有内容,但是程序的前两个字节不能包含字符“MZ”。我不熟悉c和指针,以下是我尝试过的:

方法1:这给了我编译错误

    else if (offset == 0L){                                                                                                                │  write_file_at(f, "MZ", 2, BEGINNING_OF_FILE, 0L);                                           
                                                                                                                                           │  fs_print_error();                                                                           
            if(!strncmp(((char*)data)[0], "M", 1)){                                                                                        │  printf("\n\n");                                                                             
                    if(offset == 1L && !strncmp(((char*)data), "Z", 1)){                                                                   │                                                                                              
                            fserror = ILLEGAL_MZ;                                                                                          │//  Printf("Test case 3, write Z first\n");                                                   
                    }                                                                                                                      │//  write_file_at(f, "Z", 1, BEGINNING_OF_FILE+1, 0L);                                        
            }                                                                                                                              │//  fs_print_error();                                                                         
    }                                                                                                                                      │//  write_file_at(f, "M", 1, BEGINNING_OF_FILE, 0L);                                          
                                                                                                                                           │//  fs_print_error();                                                                         
    else if (offset == 1L){                                                                                                                │                                                                                              
                                                                                                                                           │                                                                                              
            if(!strncmp(((char*)data), "Z", 1)){                                                                                           │                                                                                              
                    if(offset == 0L && !strncmp(((char*)data), "M", 1)){                                                                   │  printf("Closing file...\n");                                                                
                            fserror = ILLEGAL_MZ;                                                                                          │  close_file(f);                                                                              
                    }                                                                                                                      │  fs_print_error();                                                                           
            }                                                                                                                              │  return 0;                                                                                   
    } 
这是另一件我尝试过但没有运气的事情(好吧,至少它遵守了,哈哈哈):

*这里还注意到read_file_from是我的教授给出的一种方法,以下是参数:

未签名的长读取文件(文件文件、void*数据、未签名的长num字节、SeekAnchor start、长偏移量)

任何帮助都将不胜感激,谢谢

顺便说一句,Linux用户永远不应该喝酒和喝酒

这样做更清楚

if(buff[0] == 'M' && buff[1] == 'Z')....

这是C语言的惯用方法。由于您没有给出实际问题,因此很难给出更好的答案

您可能会喜欢运算符
|
,它将允许您简化逻辑。对于第一个问题,您必须包含编译器错误。对于第二个,您必须说明什么不起作用
strncmp
的第一个参数必须是
char*
((char*)数据)[0]
是一个
char
。你到底为什么要使用
strcmp
,它期望
src
dst
都是以空字符结尾的字符串?简单地将第一个八位组与
'M'
进行比较,将第二个八位组与
'Z'
进行比较,会更容易吗?和
从(文件,ptr,2,文件的开头,0L)读取文件
可以编译,但我无法理解第二个参数如何通过值发送空指针,并且考虑到
char*buffer2=(char*)ptr
您相信
ptr
将在
read\u file\u from
调用中更改;不会的,所以这段代码是空指针解引用的一个诀窍。我是c语言的新手,你能举一个例子来说明这段代码应该是什么样子的,以便将第一个字符与“m”进行比较吗?
if(buff[0] == 'M' && buff[1] == 'Z')....