两段几乎一样的代码,输出却不一样。
功能:一个 char类型的指针从文件中读了两行字符串,"aa bb cc \n dd ee\n";然后将其中的每个字符串都存到一个指针数组中,例如:读到aa存到数组中第一个指针元素,以此类推。
int main(){
FILE *fp = fopen("test.txt", "r");
if(fp == NULL){
perror("file open");
exit(-1);
}
fseek(fp, 0L, 2);
int fileSize = ftell(fp);
char *data = (char *)malloc(fileSize*sizeof(char));
rewind(fp);
fread(data, sizeof(char), fileSize, fp);
int i;
int space = 0;
int n = 0;
for(i = 0; i < strlen(data); i++){
if(data[i] == ' '){
space++;
}
if(data[i] == '\n'){
n++;
}
}
int NUM_STR = space + n;
printf("total=%d\n", NUM_STR);
char *arr[NUM_STR];
int j=0;
char temp[8];
int count = 0;
printf("%s", data);
for(i = 0; i < strlen(data); i++){
temp[count] = data[i];
count++;
if(data[i+1] == ' ' || data[i+1] == '\n'){
arr[j] = (char *)malloc(sizeof(char)*count);
strcpy(arr[j],temp);
printf("%s", temp);
count=0;
i++;
j++;
}
}
printf("strlen=%d\n",strlen(arr[0]));
上面这段在main函数中的代码可以正常输出,结果也是对的,最后一行打印的数组中第一个元素的strlen也是2,问题出现在下面相同的代码中
void readFromFile(char *file){
FILE *fp = fopen(file, "r");
if(fp == NULL){
perror("file open");
exit(-1);
}
fseek(fp, 0L, 2);
int fileSize = ftell(fp);
char *data = (char *)malloc(fileSize*sizeof(char));
rewind(fp);
fread(data, sizeof(char), fileSize, fp);
int i;
int space = 0;
int n = 0;
for(i = 0; i < strlen(data); i++){
if(data[i] == ' '){
space++;
}
if(data[i] == '\n'){
n++;
}
}
int NUM_STR = space + n;
printf("total=%d\n", NUM_STR);
char *arr[NUM_STR];
int j=0;
char temp[2];
int count = 0;
printf("%s", data);
for(i = 0; i < strlen(data); i++){
temp[count] = data[i];
count++;
if(data[i+1] == ' ' || data[i+1] == '\n'){
printf("%s\n", temp);
arr[j] = (char *)malloc(sizeof(char)*count);
strcpy(arr[j],temp);
printf("count=%d\n",count);
count=0;
i++;
j++;
}
}
printf("strlen=%d\n",strlen(arr[0]));
这里只是在函数中做相同的事情,代码几乎都是copy过去的,但是结果不一样,最后一行strlen的长度居然是6. 麻烦大家帮我看看问题出现在哪,谢谢了