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';
}

このコードを実行すると、Enter キーを押すとセグメンテーション違反が発生しました (文字列を書き込んだ後)。
問題は関数にあると確信しています(おそらく問題は *s ポインタです)が、修正方法がわかりません...

4

2 に答える 2

3

優先順位に問題があります。使用する必要があります

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

それ以外の

*s[i++] = ...

同様にあなたが必要とする

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

あなたが書くとき、*s[i]あなたは索引付けをしていますs。しかし、インデックスを作成したい*sので、括弧が必要です。

私はあなたのコードの残りの部分をチェックしていませんが、実際にさらにエラーがある場合は、これが残りのコードのデバッグに役立つことを願っています.

于 2012-05-05T16:47:35.963 に答える
1

問題は、* を括弧で囲んで*s[i++] = (char)c;試してみることです。(*s)[i++] = (char)c;だけでなく(*s)[i] = '\0'

于 2012-05-05T16:52:21.927 に答える