[英]Strlen printing the wrong length of an array
所以,我正在開發一個從 CSV 文件中獲取信息的程序。
我正在嘗試使用strlen
獲取該 CSV 文件中字符串的長度,但它始終返回相同的值,而且該值是錯誤的。
typedef struct User{
// id login type created_at followers follower_list following following_list public_gists public_repos
int id, followers, following, public_gists, public_repos;
char* login;
char* type;
char* created_at;
int* following_list;
int* follower_list;
} *Users;
int main(){
FILE *fp = fopen("users.csv", "r");
if(!fp){
printf("Erro");
return 0;
}
char *str;
char p[25];
str = (char *) malloc(200000);
Users new = (Users) malloc (sizeof (struct User));
Users pointer = new;
int x = 0;
while(fgets (str, 200000, fp) != NULL){
char *tmp = strdup(str);
char *token;
char **sp = &tmp;
sp = &tmp;
while((token = strsep(sp, ";"))){
switch(x){
case 0:
pointer->id = atoi(token);
break;
case 1:
pointer->login = token;
break;
case 2:
pointer->type = token;
break;
case 3:
pointer->created_at = token;
break;
case 4:
pointer->followers = atoi(token);
break;
case 5:
pointer->follower_list = atoi(token);
break;
case 6:
pointer->following = atoi(token);
break;
case 7:
pointer->following_list = atoi(token);
break;
case 8:
pointer->public_gists = atoi(token);
break;
case 9:
pointer->public_repos = atoi(token);
break;
}
x++;
printf("%s ", token);
}
printf("Length: %ld", strlen(pointer->login));
int x = 0;
putchar('\n');
}
free(str);
free(pointer);
fclose(fp);
return 0;
}
輸出:
28980885 hanjuin User 2017-05-26 11:47:56 0 [] 0 [] 0 2
Length: 5
我不知道是我愚蠢還是我的代碼有問題。
我可以絕對向您保證的一件事是 strlen() 工作正常,並准確返回它應該返回的內容。
代碼中對 strlen() 的唯一調用傳遞了它從函數 strsep() 獲得的參數,該函數不是標准庫函數,因此我會在那里尋找問題所在。 也許它返回的字符串中有一些額外的空格? 或者,在解析字符串和獲取其長度的時間之間,字符串正在通過指針進行修改?
拋出一些 printf() 來看看發生了什么,或者學習使用調試器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.