2013-02-25 94 views
1

嗨我的程序遇到一些麻烦,当我运行它崩溃,我不得不强制它关闭,我有一些麻烦,确定是什么导致它的任何帮助将不胜感激简单的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; 
} 
+2

使用调试器。它将帮助您立即找到问题。但我建议你看看循环内的'printf'调用...... – 2013-02-25 14:35:26

+3

或者只是编译时加上警告。 – netcoder 2013-02-25 14:35:51

+0

我注意到你在内部while循环完成后不重置countT = 0。所以后面的行将没有任何内容。不是你的崩溃的来源,但仍然认为我会提到它。 – Rob 2013-02-25 14:38:53

回答

0

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

1

lin没有初始化值。

我认为读line=lin;行应该是lin=line

1

尝试反转这一初始化:

line=lin; 

lin=line; 

否则,lin是不确定的。

1
printf("%s",abc); 

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

0

尝试用

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

您正在使用printf正确更换

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

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

3

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

printf("%s",abc); 

在C字符串是空字符\0终止字符序列。所以这printf将尝试保持打印字符,直到它找到空字节。你的程序可能会一直试图读取内存,直到它找到一个坏段,然后崩溃。

你可以想做什么,而不是你的printf只是指定一个字符:

printf("%c",abc); 

的另一个问题是,你必须在分配逆转变量:

line=lin; 
1

问题1:

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

line = lin;

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

问题2:

变化

的printf( “%S”,ABC);

的printf( “%C”,ABC);

as abc是char。

0

在代码中的错误是SIMPLE
“行=林”是代码的问题
这里林未初始化的变量,因此保持垃圾值
这种垃圾值被传递到可变线和它拧紧了一切
我认为正确的代码将是lin =行
我发现另一个错误是printf('%s',abc);类型说明符是错误的,因为abc已被声明为字符和类型说明符必须是%c
我还发现未使用的命令参数args和argv只能用于传递从命令promt运行的参数