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