2016-10-26 9 views
-1

私はポインタを使ってメインで使用できるように、2つのスキャン文字列を返す正しい構文を見つけようとしています。ポインタを使って2つのユーザ入力文字列をメインに戻す

void get_user_info(char* user_string_one[20] , char* user_string_two[20]) { 
char string_one[20] = ""; 
char string_two[20] = ""; 

string_one = "hello"; 
string_two = "goodbye"; 

*user_string_one = string_one; 
*user_string_two = string_two; 

return; 
} 

int main(void) { 
char user_string_one[20] = ""; 
char user_string_two[20] = ""; 

get_user_info(user_string_one[20], user_string_two[20]); 

printf("%s %s\n", user_string_one, user_string_two); 

return 0; 
} 

私は本当に簡単な間違いをしていると確信しています。私はそれを理解できないようです。配列は引数として関数に渡された場合

+4

あなたが上にあるものはまったくまったく正しいものではなく、あなたは本当にCを学ぶ必要があります。 –

+0

これは文字列の初期化方法ではありません。 –

+0

まず、文字列に 'string_one =" hello ";'を指定することはできません。 'string_one'は配列です。定義されているとき( 'char string_one [20] =" hello ";')、 'strcpy'を使って正しい初期化をしなければなりません。 –

答えて

2
#include <stdio.h> 
#include <string.h> 

void get_user_info(char* user_string_one, char* user_string_two) 
{ 
    strcpy(user_string_one, "hello"); 
    strcpy(user_string_two, "goodbye"); 
} 

int main(void) 
{ 
    char user_string_one[20]; 
    char user_string_two[20]; 

    get_user_info(user_string_one, user_string_two); 

    printf("%s %s\n", user_string_one, user_string_two); 

    return 0; 
} 
1

文字列はCでそのよう周りを通過することができない、関数は最初の要素へのポインタを受け取ります。ポインタは配列ではありません。

文字列のデータをコピーするには、標準ヘッダ<string.h>の関数を使用する必要があります。例えば;リテラル文字列、"hello"ように、charのアレイとして表される

#include <string.h> 

void get_user_info(char* user_string_one , char* user_string_two) 
{ 
     strcpy(user_string_one, "hello"); 
     strcpy(user_string_two, "goodbye"); 
} 

int main(void) 
{ 
    char user_string_one[20] = ""; 
    char user_string_two[20] = ""; 

    get_user_info(user_string_one, user_string_two); 

    printf("%s %s\n", user_string_one, user_string_two); 

    return 0; 
} 

ベア念頭において、終端添付'\0'(ゼロの値を持つchar)(終了を示すマーカー)。したがって、"hello"は、'h','e','l','l','o'および'\0'の6文字を使用してメモリ内に表される。 strcpy()などの関数ASSUME文字列はその形式で提供され、宛先配列(コピー先の配列)は'\0'までのすべてを保持するのに十分な長さに依存します。

関連する問題