2016-04-25 3 views
0

ユーザーに文字列を入力するように指示するコードを記述しようとしています。次に、関数 'initialize'を使用して配列のすべての値を 'a'に変更します。最後の値は '\ 0'に変更されます。呼び出し関数は更新された文字列を出力します。ポインターを使用して関数の配列の値を変更する際の問題

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

void initialize(char (*firstString)[50]); 

void main(void) 
{ 
    char firstString[50]; 

    printf("Enter a string: "); 
    scanf("%s", firstString); 
    printf("%s", firstString); 
    initialize(&firstString); 
    printf("%s", firstString); 
} 

void 
initialize(char (*firstString)[50]) 
{ 
    int i; 
    for (i = 0; i < 50; i++) { 
     *firstString[i] = 'a'; 
     *firstString[49] = '\0'; 
    } 
} 

すべてのヘルプは高く評価されています。ここでは

は、私が持っているコードです。

編集:

ここに作業コードがあります。助けてくれてありがとう!

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

void initialize(char firstString[50]); 

void main(void) 
{ 
    char firstString[50]; 

    printf("Enter a string: "); 
    scanf("%s", firstString); 
    printf("%s", firstString); 
    initialize(firstString); 
    printf("%s", firstString); 
} 

void 
initialize(char firstString[50]) 
{ 
    int i; 
    for (i = 0; i < 50; i++) 
     memset(firstString, 'a', 49); 
    firstString[49] = '\0'; 
} 
+1

あなたは問題が何であるかがわかります-Wall -Wextraとの警告を取得する必要があります

また、あなたの関数は、単に書くことができます。 – 2501

+0

'* firstString [i]'とprecedence .... –

+0

* firstSring [i]は**ポインタで1つのポインタしか使用しません – Schafwolle

答えて

2

[]ので*firstString[x]*(firstString[x])として解析され*より高い優先順位を有しています。 C Operator Precedence を参照してください。

正しい優先順位を得るには、(*firstString)[x]と記述する必要があります。

void 
initialize(char (*firstString)[50]) 
{ 
    memset(firstString, 'a', 49); 
    (*firstString)[49] = '\0'; 
} 
関連する問題