我试图分裂' str'在2个int变量和1个char变量中。这是一个代码:
int imagescount = 0;
private void SaveImageFromWebBrowser()
{
IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument;
IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
foreach (IHTMLImgElement img in doc.images)
{
imgRange.add((IHTMLControlElement)img);
imgRange.execCommand("Copy", false, null);
using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
{
bmp.Save(@"e:\webbrowserimages\Image" + imagescount.ToString("D6") + ".bmp",
System.Drawing.Imaging.ImageFormat.Bmp);
}
imagescount++;
}
}
这是一个错误:
感谢您的帮助。
答案 0 :(得分:2)
sscanf()仅适用于标准的C 0终止字符串。 fread()不会将0附加到它所读取的内容。如果要读取8个字节并使用sscanf(),则需要首先对数据进行0终止。所以你的数组需要至少9个字节,所以你可以在数据上附加一个0。
此外,您需要将变量地址传递给它,以便它可以写入它们。
所以看起来应该更像这样:
FILE *fp;
int i,j;
char str[9] = { 0 };
char valor;
if(!(fp = fopen("miniflota_g.dat","rb"))){
printf("Error opening file.");
getch();
return;
}
while(fread(str,sizeof(str)-1,1,fp) == 1){
sscanf(str,"%d %d %c",&i,&j,&valor);
printf("%d %d %c",i,j,valor);
}
fclose(fp);
答案 1 :(得分:1)
你永远不会终止' str'所以sscanf可以读完。
您需要将输出变量的地址传递给sscanf,而不是值。 (例如。&i
代替i
)。
如果您启用编译器警告(-Wall with gcc),编译器将至少警告您第二点。