恼人的strcat()输出

时间:2014-01-19 10:51:24

标签: c text strcmp

我在使用字符串方面遇到了一些未知问题。它只发生在这种算法的实例上:

由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

*

**

***

****

*****

我不知道为什么。有人可以帮忙吗? :)

3 个答案:

答案 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;
}