簡體   English   中英

Strlen 打印錯誤的數組長度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM