简单的C程序在运行时崩溃

时间:2013-02-25 14:34:07

标签: c

嗨,我运行它时遇到了一些问题,它崩溃了,我必须强行关闭它,我在确定导致它的任何帮助时会遇到一些麻烦。

#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;
}

9 个答案:

答案 0 :(得分:4)

麻烦的是你有一个字符,并试图将其打印成字符串:

printf("%s",abc );

在C字符串中是由空字符\0终止的字符序列。因此,printf将尝试继续打印字符,直到找到空字节为止。

,你的程序可能会一直尝试读取内存,直到找到坏段,然后崩溃。

您可能想要做的只是在printf中指定一个角色:

printf("%c",abc );

另一个问题是你在赋值中反转了变量:

line=lin;

答案 1 :(得分:1)

lin没有初始值。

我认为阅读line=lin;的行应为lin=line

答案 2 :(得分:1)

尝试反转此初始化:

line=lin;

lin=line;

否则,lin未定义。

答案 3 :(得分:1)

printf("%s",abc );

打印一个字符串,abc是一个字符。

答案 4 :(得分:1)

问题1:

变量“lin”没有正确初始化,

行=林;

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

问题2:

更改

printf(“%s”,abc);

printf(“%c”,abc);

因为abc是一个字符。

答案 5 :(得分:0)

while(countL<lin)循环中,您永远不会重置countT变量。

答案 6 :(得分:0)

尝试替换

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

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

答案 7 :(得分:0)

您错误地使用了printf

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

答案 8 :(得分:0)

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