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

问题1:

变量“lin”未正确初始化,

线=林;

所以变量“line”和“lin”包含垃圾值。

问题2:

改变

printf("%s",abc );

printf("%c",abc );

因为 abc 是一个字符。

于 2013-02-25T14:40:29.500 回答
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 是一个字符。

于 2013-02-25T14:36:12.023 回答
0

您使用printf不正确。

%s您作为格式传递,它需要char*作为参数,而不是char.

于 2013-02-25T14:36:44.897 回答
0

您的代码中的错误很简单
“line = lin”是
这里代码的问题,变量 lin 没有初始化,因此保存垃圾值
这个垃圾值被传递给变量行,它搞砸了
我认为正确的代码会be lin=line
我发现的另一个错误是 printf('%s',abc); 类型说明符错误,因为 abc 已被声明为字符且类型说明符必须为 %c
我还发现未使用的命令参数 args 和 argv 只能用于传递从命令提示符运行的参数

于 2013-02-25T14:55:33.597 回答
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 回答