2012-05-05 38 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