以下是我的代码。在此程序中,我使用系统功能并传递命令行参数以获取pc的mac地址,然后将其写入txt文件。 txt文件创建成功。但是,当我尝试打开创建的txt文件时,它什么也不会显示。它显示字母M和一些空格。知道为什么会这样吗?谢谢。
#include<stdio.h>
int main()
{
system("wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress >macaddress.txt");
FILE * fpointer=fopen("macaddress.txt","r");
char buffer[500];
while(!feof(fpointer)){
fgets(buffer,500,fpointer);
puts(buffer);
}
fclose(fpointer);
}
答案 0 :(得分:0)
这不是ASCII编码的文件。这是转储
0 1 2 3 4 5 6 7 8 9 A B C D E F 0000:0000 FF FE 4D 00 41 00 43 00 41 00 64 00 64 00 72 00 ■M.A.C.A.d.d.r. 0000:0010 65 00 73 00 73 00 20 00 20 00 20 00 20 00 20 00 e.s.s. . . . . . 0000:0020 20 00 20 00 20 00 20 00 0D 00 0A 00
等,以免透露我的MAC地址。
请注意,它也包含零,用fgets
读取后将终止任何字符串输出。
我的文本编辑器(Notepad ++)显示正确的内容,因为它会自动设置正确的文本格式。
答案 1 :(得分:0)
这将执行您想要的操作,但是,如果您不只是打印文件的内容,而是要实际执行该操作,并且需要ASCII文本,则需要自己从宽字符进行转换。 / p>
由于此特定文件只是普通的字母和数字文本,因此您可以使用sprintf将宽字符串转换为窄字符串。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
system("wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress > macaddress.txt");
//Binary mode tells fgetws to read wide characters instead of multi-byte.
FILE * fp = fopen("macaddress.txt", "rb");
if (fp)
{
wchar_t buffer[500] = { 0 };
fread(buffer, 1, 2, fp); //read and discard BOM
while (fgetws(buffer, 500, fp))
{
// %ls means the parameter is a wide string.
// %S also works in Visual Studio
printf("%ls", buffer);
//Convert wide characters to ASCII
//This assumes the wide characters are all in the ASCII range
char ascii[500] = { 0 };
sprintf(ascii, "%ls", buffer);
printf("%s", ascii);
}
fclose(fp);
}
return 0;
}