1

こんにちは、プログラムを実行するとクラッシュします。プログラムを強制的に閉じなければなりません。原因を突き止めるのに苦労しています。助けていただければ幸いです。

#include <stdio.h>

void myprint(char let, int num, int line)
{
int countL=0,countT=0,numb, lin;
char abc;
numb=num;
line=lin;
abc=let;

while(countL<lin)
{
    while(countT<numb)
    {
        printf("%s",abc );
        countT++;
    }
    printf("\n");
    countL++;
 }
}

int main(int argc, char const *argv[])
{
int times = 5, lines = 3;
char letter = 'a';

myprint(letter, times, lines);

return 0;
}
4

9 に答える 9

4

問題は、単一の文字があり、それを文字列として出力しようとしていることです:

printf("%s",abc );

C 文字列では、ヌル文字で終了する一連の文字があります\0。そのprintfため、ヌルバイトが見つかるまで文字を印刷し続けようとします。プログラムはおそらく、不良セグメントが見つかるまでメモリの読み取りを試み続け、その後クラッシュします。

代わりにやりたいことは、で文字を指定することですprintf

printf("%c",abc );

別の問題は、割り当てで変数が逆になっていることです。

line=lin;
于 2013-02-25T14:38:34.253 に答える
1

lin初期化された値はありません。

読む行line=lin;lin=line

于 2013-02-25T14:35:58.673 に答える
1

この初期化を逆にしてみてください:

line=lin;

lin=line;

それ以外の場合linは未定義です。

于 2013-02-25T14:35:59.893 に答える
1
printf("%s",abc );

文字列を出力します。 abc は char です。

于 2013-02-25T14:36:12.023 に答える
1

問題 1:

変数「lin」が正しく初期化されていません。

ライン=リン;

そのため、変数「line」と「lin」にはガベージ値が含まれています。

問題 2:

変化する

printf("%s",abc);

printf("%c",abc);

abc は char であるためです。

于 2013-02-25T14:40:29.500 に答える
0

while(countL<lin)ループ内では、countT変数をリセットすることはありません。

于 2013-02-25T14:35:46.150 に答える
0

交換してみる

while(countT<numb)
{
    printf("%s",abc );
    countT++;
}

while(countT<numb)
{
    printf("%c",abc );
    countT++;
}
于 2013-02-25T14:36:35.103 に答える
0

使い方がprintf間違っています。

ではなく、引数として%s必要な format として渡しました。char*char

于 2013-02-25T14:36:44.897 に答える
0

あなたのコードのエラー
は単純です "line = lin"は
ここのコードの問題です変数linが初期化されていないため、ガベージ値を保持します
このガベージ値は変数lineに渡され
、適切なコードであると思われるすべてを台無しにしますbe lin=line
私が見つけた別のバグは printf('%s',abc); でした。abc は文字として宣言されており、型指定子は %c
でなければならないため、型指定子が間違っています。また、未使用のコマンド引数 args および argv は、コマンド プロンプトから実行される引数を渡すためにのみ使用できることもわかりました。

于 2013-02-25T14:55:33.597 に答える