sizeof为2,strlen为31
#include #include #include #define MAX 200int main(int argc, char *argv[]){ FILE *in; float x,y,z, cart[MAX][3]; char ch, tmp[10], element[MAX][2]; int count; if((in=fopen(argv[1],"r")) == NULL){ printf("Can't open file!"); exit(1); } while((ch=getc(in)) != EOF) for(count=0; fscanf(in, "%s%f%f%f", tmp, &x, &y, &z) == 4; count++){ element[count][0]=tmp[0]; element[count][1]=tmp[1]; cart[count][0]=x; cart[count][1]=y; cart[count][2]=z; } for(count=0; element[count][0]!='\0'; count++) printf("%d\t%s\t%d\t%d\n",count, element[count], strlen(element[count]), sizeof(element[count])); fclose(in); return 0;} FILE *in; float x,y,z, cart[MAX][3]; char ch, tmp[10], element[MAX][3];//改成3个字节存放字符串结束符0 int count; if((in=fopen("c:\\test.txt","r")) == NULL){ printf("Can't open file!"); exit(1); } while((ch=getc(in)) != EOF) for(count=0; fscanf(in, "%s%f%f%f", tmp, &x, &y, &z) == 4; count++){ element[count][0]=tmp[0]; element[count][1]=tmp[1]; element[count][2]=0;//字符串结束符0 cart[count][0]=x; cart[count][1]=y; cart[count][2]=z; } for(count=0; element[count][0]!='\0'; count++) printf("%d\t%s\t%d\t%d\n",count, element[count], strlen(element[count]), sizeof(element[count])); fclose(in);
[解决办法]
你把它当字符串使用,当然要保证末尾有0了,ANSC字符串是以0结尾的。
[解决办法]
strlen函数是计算字符串起始地址到结束符'\0'的距离(格式控制串的%s也是一样)。