【问题标题】:Annoying strcat() output烦人的 strcat() 输出
【发布时间】:2014-01-19 10:51:24
【问题描述】:

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

来源.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

*

**

***

****

*****

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

【问题讨论】:

  • 它应该是这样的:* ** *** **** *****
  • 使用这样的初始化程序:char ast[32] = "";

标签: c text strcmp


【解决方案1】:

您的字符串ast 未初始化,因此它将包含垃圾,您可以在其中添加内容。

首先初始化它 - 你需要一个以零结尾的字符串,将第一个字符设置为'\0'

【讨论】:

  • 它仍然会产生垃圾。我应该如何初始化该行。我试过 ast[0] = '\0';但是还是不行。
  • 运行时编译器似乎有问题。我重试了这个,它奏效了。谢谢!
【解决方案2】:

使用

ast[0]=0;

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

【讨论】:

  • 它变成“无效的初始化程序”。
【解决方案3】:

使用 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多