2012-05-05 52 views
1

這是我的代碼:當我執行這個代碼,我得到當我按下輸入分割故障Ç段錯誤是由於錯誤的指針

#include <stdio.h> 
#include <stdlib.h> 

void getinfo(unsigned int a, unsigned int b, char **s); 

int main(){ 
    unsigned int len_max = 8; 
    unsigned int current_size = 0; 
    char *pStr = malloc(len_max); 
    if(pStr == NULL){ 
     perror("\nMemory allocation\n"); 
     return EXIT_FAILURE; 
    } 
    current_size = len_max; 

    printf("Inserisci hostname: "); 
    getinfo(len_max, current_size, &pStr); 
    printf("\nLa stringa inserita è: %s\n", pStr); 
    free(pStr); 
    return EXIT_SUCCESS; 
} 

void getinfo(unsigned int a, unsigned int b, char **pStr){ 
    unsigned int i = 0; 
    char c = EOF; 
    while((c = getchar()) != '\n'){ 
     *pStr[i++] = (char)c; 
     if(i == b){ 
      b = i+a; 
      if((*pStr = realloc(*pStr, b)) == NULL){ 
       perror("\nMemory allocation error\n"); 
       exit(EXIT_FAILURE); 
      } 
     } 
    } 
    *pStr[i]='\0'; 
} 

(後我已經寫的字符串)。
我敢肯定,問題是功能(可能是問題是*的指針),但我不知道如何糾正它...

+0

注意:'getchar'返回'int'而不是'char'。你應該考慮把'c'改成'int' –

+0

哦謝謝:)我糾正了錯誤! – polslinux

回答

3

你有一個優先問題。您需要使用的

(*s)[i++] = ... 

代替

*s[i++] = ... 

同樣需要

(*s)[i]='\0'; 

當你寫*s[i]你索引s。但是你想索引*s,因此需要括號。

我還沒有檢查過其餘的代碼,但我希望這可以幫助您調試其餘部分,如果確實存在更多錯誤。

+0

非常感謝:)現在所有的工作:D – polslinux

+0

爲什麼?這是一個後增量...所以首先我'我',我會更新'我'... – polslinux

+0

@polslinux是的,我認爲你可能是對的。我自己會嘗試封裝向字符串添加額外字符的方法,而不是將它與循環交織在一起。 –

1

問題出在*s[i++] = (char)c;嘗試將它轉換爲(*s)[i++] = (char)c;,括號旁邊是* s。以及(*s)[i] = '\0'

+0

你說得對:O有個大洞xD – polslinux

+0

我不這麼認爲。當緩衝區滿了時,你總是擴展它。所以總有餘下1個角色的空間。 –

+0

@Totaldowner:不用等,你確定嗎?因爲我已經完成了i ++,因此我比較了「下一個我」和b!我不會將我與實際位置相比較:D – polslinux