首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恼人的strcat()输出

恼人的strcat()输出
EN

Stack Overflow用户
提问于 2014-01-19 10:51:24
回答 3查看 96关注 0票数 1

我在使用字符串时遇到了一些未知的问题。只有在这种算法的实例中才会发生这种情况:

Source.c

代码语言:javascript
复制
#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

[美]常春藤☼ⁿbv░↓@*

[美]常春藤☼ⁿ░↓@**

[美]常春藤☼ⁿbv░↓@*

[美]常春藤☼ⁿ░↓@**

电话:@*@

它应该是这样的:

输入三角形大小:5

代码语言:javascript
复制
*

**

***

****

*****

我也不知道原因。有人能帮忙吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-19 10:53:13

您的字符串ast未初始化,因此它将包含垃圾,并将其附加到其中。

首先,您需要一个以零结尾的字符串,将第一个字符设置为'\0'

票数 5
EN

Stack Overflow用户

发布于 2014-01-19 10:55:57

使用

代码语言:javascript
复制
ast[0]=0;

将修复它-也就是初始化它。

票数 0
EN

Stack Overflow用户

发布于 2014-01-20 20:42:56

选择使用snprintf:

代码语言:javascript
复制
 #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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21215771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档