-1

問題は、私が実際にポインターの配列を処理する方法がわからないことです。私が行う方法では、配列の位置にアドレスが渡されるため、常にすべての位置、最後の入力になります。しかし、* 演算子を使用すると、最初の文字のみが渡されます。

int main( void ) {

    void prompt_str( const char *str[], char *const copy ); //prototype

    const char *str[ 20 ]= { '\0' };
    const char *copy= 0;

    //prompt stringa
    prompt_str( str, &copy );

} //end main

void prompt_str( const char *str[], char *const copy ) { //definition

    size_t n_str= 0, i= 0;

    do {
        printf( "Insert a string\n:" );
        fgets( copy, 100, stdin );
        i= ( strlen( copy )- 1 ); //get length
        copy[ i ]= '\0'; //remove \n

        str[ n_str++ ]= copy; //put string into pointer of array

    } while ( n_str< 3 );

} 
4

1 に答える 1

1

ポインタの概念を誤解しているようです。

あなたがするとき

const char *copy= 0;

のみを取得しpointerます。文字列を保持するためのメモリはありません。

できるよ

char copy[100];

代わりは。これにより、文字列 (100 文字未満) を保持するためのメモリが確保されます。copyさらに、関数を呼び出すときにポインターであるかのように使用できます。

または、次のような動的メモリを使用できます。

char* copy = malloc(100 * sizeof(char));  // Allocate memory

// ... code

free(copy);  // Release memory
于 2016-11-26T17:13:26.693 に答える