为什么这段代码在linux下会出问题,而在vc里不会?
本帖最后由 K8001 于 2013-06-12 14:20:41 编辑
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]="2013/06/12 09:00,130.131.151.155,username,password";
char dt[10],tm[5],ip[15],name[20],psw[20];
sscanf(str,"%s %[^,],%[^,],%[^,],%s",dt,tm,ip,name,psw);//linux下这句执行完后str第一个字符被改成了\0
printf("%d\n%s\n%s\n%s\n%s\n%s",strlen(str),dt,tm,ip,name,psw);
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]="2013/06/12 09:00,130.131.151.155,username,password";
char dt[11],tm[6],ip[16],name[20],psw[20];
sscanf(str,"%s %[^,],%[^,],%[^,],%s",dt,tm,ip,name,psw);//linux下这句执行完后str第一个字符被改成了\0
printf("%d\n%s\n%s\n%s\n%s\n%s",strlen(str),dt,tm,ip,name,psw);
return 0;
}
能否解释一下为什么接收变量宽度不够会影响到原始字符串?
估计和具体实现有关, str 在 dt 的后面,dt 的 '\0' 写入了str[0]
我把dt的宽度留够(tm、ip不留够)时,为什么str还是被覆盖了?
楼主 你~~~~~~ 好萌
[解决办法]
开debugger吧,多半越界,而VC下变量之间有一定的额外的空间,没发作而已。
[解决办法]
#include <stdio.h>
#include <string.h>
int main() {
char str[100]="2013/06/12 09:00,130.131.151.155,username,password";
char dt[11],tm[6],ip[16],name[20],psw[20];
if (5==sscanf(str,"%10s %5[^,],%15[^,],%19[^,],%19s",dt,tm,ip,name,psw)) {
printf("%d\n[%s]\n[%s]\n[%s]\n[%s]\n[%s]\n",strlen(str),dt,tm,ip,name,psw);
} else {
printf("[%s] format error!\n",str);
}
return 0;
}