2017-05-10 29 views
1

char型の配列を作成し、配列の要素数を入力した後、その配列のメモリを割り当て、すべての要素を配列に入力した後に出力するタスクがあります。 。問題は、配列がint型の場合はどうすればよいかわかりますが、char型の場合はランダムな文字列の印刷のみです。私はこのコードを書いた:C - char型の配列のメモリの割り当て

#include <stdio.h> 
#include <stdlib.h> 

int main() { 


    int n, i; 
    char *arrA; 


    printf("Enter number of elements: "); 
    scanf("%d", &n); 
    printf("Enter array elements: \n"); 
    arrA = (char*)malloc(n * sizeof(char)); 
    for (i = 0; i < n; ++i) { 
     scanf("Array element: %c \n", arrA + i); 
    } 

    for (i = 0; i < n; ++i) { 
     printf("%d. array element is: %c\n", i + 1, arrA + i); 
    } 

    free(arrA); 
    return 0; 
} 

私はそれをchar型の配列のために働かせることができますか?

+0

'のscanf( "配列要素:%Cの\ nを"、...)は'私にとって非常にあやふやに見えます。 – InternetAussie

+0

@InternetAussieあなたはより良い方法を提案することができます、それはとにかく私はそれを書いたこのように動作しません? –

答えて

1

補完:

あなたはこれをしたい:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int n, i; 
    char *arrA; 

    printf("Enter number of elements: "); 
    scanf("%d", &n); 
    printf("Enter array elements followed by [Enter] key: \n"); 

    getc(stdin); // absorb \n (scanf oddity) 

    arrA = malloc(n * sizeof(char)); 

    for (i = 0; i < n; ++i) { 
    scanf("%c", &arrA[i]); 
    } 

    for (i = 0; i < n; ++i) { 
    printf("%d. array element is: %c\n", i + 1, arrA[i]); 
    } 

    free(arrA); 
    return 0; 
} 
+0

scanf( "%c"を '%c" 'に変更し、' 'scanf' oddity ''はもはや存在しないはずですが、空白がなければ空白は何もしません。それはすべてのものを酷使します。そして、 'sizeof(char)'は、常に1であるので、冗長です。 – InternetAussie

+0

@SvenB文字を入力してください。最後に[Enter]キーを1回押してください。 –

+0

@InternetAussie not quite。最初の要素は実際には '10'(前の' scanf'からの改行)です –

3

変更ライン:

printf("%d. array element is: %c\n", i + 1, arrA + i); 

へ:

printf("%d. array element is: %c\n", i + 1, *(arrA + i)); 

か:

printf("%d. array element is: %c\n", i + 1, arrA[i]); 

今あなたは、ポインタそのものではなく、そのコンテンツを印刷しようとしているよう。

mallocの結果にmallocthis oneの結果をキャストしない理由についてはthis linkもお読みください。

2

arrA + iは、ポインタです。 printf引数に​​を使用するか、より明確で正確に同等のarrA[i]を使用する必要があります。

注:sizeof(char)はC規格では1であるため、余計です。また、右側にmallocをキャストしないでください。 Do I cast the result of malloc?を参照してください。最後に、常にmallocの結果を確認してください。 NULLの場合、メモリ割り当てに失敗しました。他の回答に

+0

あなたが言ったように変更しましたが、要素の数を入力した後もランダムな文字の印刷が得られ、要素を配列に入力するフェーズに到達できません...また、arrAを初期化せずに使用できないというエラーが発生します。 .. –

関連する問題