2014-01-19 65 views
1

我在使用字符串時遇到了一些未知的問題。它只是發生在這種算法的實例:惱人的strcat()輸出

由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

它應該是這樣的: * ** *** **** ***** – Wix

+0

使用初始化程序l ike this:'char ast [32] =「」;' – alk

回答

5

您的字符串ast未初始化,因此它將包含垃圾,您將其追加的東西。

首先初始化 - 您需要零終止的字符串,將第一個字符設置爲'\0'

+0

它仍然給垃圾。我應該如何初始化該行。我試過 ast [0] ='\ 0'; 但它仍然無法正常工作。 – Wix

+0

它應該工作。 –

+0

char ast [32]; ast [0] ='\ 0';必須工作。 – tesseract

0

使用

ast[0]=0; 

將修復它 - 又名初始化

+0

它會變成「無效的初始值設定項」。 – Wix

+0

http://codepad.org/IggbpCal說itworks –

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