我在使用字符串方面遇到了一些未知问题。它只发生在这种算法的实例上:
由source.c
#include <stdio.h>
#include <string.h>
main()
{
int cur, max;
char ast[32];
printf("Enter the triangle's size: ");
scanf("%d", &max);
for(cur = 1; cur <= max; cur++)
{
strcat(ast, "*");
if(cur == 1)
{
printf("\n");
}
printf("%s\n", ast);
}
getch();
}
发生这种情况:
概述:用星号(*)创建三角形的程序 输入的大小。
输入三角形的大小:5
■Z☼]vYⁿbv░↓@ *
■Z☼]vYⁿbv░↓@ **
■Z☼]vYⁿbv░↓@ * 的
■Z☼]vYⁿbv░↓@ * *
■Z☼]vYⁿbv░↓@ *
它应该是这样的:
输入三角形尺寸:5
*
**
***
****
*****
我不知道为什么。有人可以帮忙吗? :)
答案 0 :(得分:5)
您的字符串ast
未初始化,因此它将包含您添加内容的垃圾。
首先启动它 - 你需要一个零终止字符串,将第一个字符设置为'\0'
。
答案 1 :(得分:0)
使用
ast[0]=0;
将修复它 - 也就是初始化它
答案 2 :(得分:0)
替代使用snprintf:
#include <stdio.h>
#include <string.h>
#define MAX 32
int main(void)
{
unsigned int cur, max;
char ast[32];
printf("Enter the triangle's size: ");
scanf("%d", &max);
if (max > MAX)
return -1;
for(cur = 1; cur <= max; cur++)
{
if(cur == 1)
{
snprintf(ast,2,"*");
printf("\n");
}
else
strlcat(ast, "*",cur + 1);
printf("%s\n", ast);
}
return 0;
}