2016-11-26 8 views
0

ユーザーが入力した数値で指定された場合、その数の文字のみを出力するプログラムで作業しています。たとえば、ユーザーが数字10を入力すると、14文字(改行、空白およびタブを含む)が入力された場合、10文字だけが印刷されます。私のコードは最初の3つのキャラクターのために働くようですが、それはゴミをプリントアウトします。私は何が間違っているのか分かりません。C:特定の文字数だけを出力するプログラム

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

void findchars(char *abc, int number); 

int main(void) 
{ 
    char *array; // the actual array 
    int num; // number of characters to read, becomes array value 

    printf("Number of characters:"); 
    scanf_s("%d", &num); 

    array = (char *)malloc(num * sizeof(char)); 

    findchars(array, num); 

    printf("The first %d characters: ", num); 

    puts(array); 

    free(array); 

    return 0; 
} 

void findchars(char *abc, int number) 
{ 

    int i; 

    printf("Type characters and I will stop at %d: ", number); 

    for (i = 0; i < number; i++) 
    { 
     abc[i] = getchar(); 
    } 

} 
+0

'文字列を取りputs'。あなたはそれを文字列にしていません。 – melpomene

+0

'malloc'をキャストしないでください。また、 'sizeof(char)'は定義上1です。 – melpomene

+0

'abc'は' NULL'を終了していません。 Cの文字列は '\ 0'文字で終了する必要があります –

答えて

2

putsにゼロ以外の終了配列を渡しています。あなたのプログラムを動作させたい場合は、配列1の項目を大きく作成し、最後に '\ 0'を追加してください。

編集:この権利puts

array = (char *)malloc((num+1) * sizeof(char)); 

、その後のような:

array[num] = '\0'; 
+0

これをコード化するにはどうすればいいですか?私はCの新機能です。 – Markovnikov

+0

こんにちは!助けてくれてありがとう!私のコードを追加してうまくいきましたが、最後の文字はスキップします。 – Markovnikov

+0

改行文字について上記のコメントを参照してください。 – aragaer

関連する問題