由于指针错误导致的c SEG故障

由于指针错误导致的c SEG故障,c,function,pointers,C,Function,Pointers,这是我的代码: #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

这是我的代码:

   #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';
}
当我执行这段代码时,当我在编写字符串后按enter键时,我遇到了一个分段错误。
我确定问题出在函数中可能是*s指针的问题,但我不知道如何更正它…

您有一个优先级问题。你需要使用

(*s)[i++] = ...
而不是

*s[i++] = ...
同样地,你需要

(*s)[i]='\0';
当你写*s[i]时,你是在索引s。但是您需要索引*s,因此需要括号


我没有检查其余的代码,但如果确实有更多错误,我希望这能帮助您调试其余的代码。

您有一个优先级问题。你需要使用

(*s)[i++] = ...
而不是

*s[i++] = ...
同样地,你需要

(*s)[i]='\0';
当你写*s[i]时,你是在索引s。但是您需要索引*s,因此需要括号


我还没有检查其余的代码,但如果确实有更多错误,我希望这能帮助您调试其余的代码。

问题在于*s[I++]=charc;尝试将其转换为*s[i++]=charc;用括号括起*s。以及*s[i]='\0.

问题在于*s[i++]=charc;尝试将其转换为*s[i++]=charc;用括号括起*s。以及*s[i]='\0'。

旁注:getchar返回int&非char。你应该考虑把C换成一个字:谢谢,我纠正了错误!旁注:getchar返回int&非char。你应该考虑把C换成一个字:谢谢:我纠正了错误!是的,我想你可能是对的。我自己会尝试封装向字符串添加额外字符的方法,而不是让它与循环纠缠在一起。@polslinux是的,我认为你可能是对的。我自己会尝试封装向字符串添加额外字符的方法,而不是让它与循环纠缠在一起。我不这么认为。当缓冲区满时,您总是扩展它。所以总有空间再容纳一个角色。@Totaldowner:不,等等……你确定吗?因为我已经完成了i++的运算,所以我将下一个i与b进行比较!我不把我和实际情况作比较:我不这么认为。当缓冲区满时,您总是扩展它。所以总有空间再容纳一个角色。@Totaldowner:不,等等……你确定吗?因为我已经完成了i++的运算,所以我将下一个i与b进行比较!我不会将i与实际位置进行比较:D