2013-03-22 68 views
1

我想使用sprintf來製作一串代表文件名的字符串。這些文件將被命名爲1,2,3,4,5 ...但是當我這樣做時,我會遇到一些奇怪的錯誤。 for循環僅打印出第一輪。輸出如下所示:STR:1.xlxs I:7567468sprintf使一堆文件名

char str[3]; 
int i; 

for(i = 0; i < FILES; i++){ 
    sprintf(str, "%d%s", i+1, ".xlxs"); 
printf("str: %s\n", str); 
    printf("i: %i\n", i); 
} 

回答

1

您在str預留的空間太小。您需要爲i用於擴展".xlxs"和另一個拖尾\0一個字符,5,所以聲明str,如:

char str[7]; 

以適應您的字符串。因爲,如果緩衝區太小,printf找不到\0,並會打印找到的所有數據,直到出現\0

0

您的str緩衝區只有3個字符長,但是您要輸入的字符串要大得多。它的工作原理是因爲在這種情況下你碰巧能夠寫出數組的末尾而不會發生任何不良事件。

1

進行這種修改,你很好去。

#define FILES 3 

char str[FILES][7]; 
int i; 

for(i = 0; i < FILES; i++) 
{ 
    sprintf(str[i], "%d%s", i+1, ".xlxs"); 
    printf("str: %s\n", str[i]); 
    printf("i: %i\n", i); 
} 
+0

「1.xlxs」是7字節 – 2013-03-22 07:25:03

+0

@Aniket ya進行了修正 – 2013-03-22 07:27:06

0

你的情況,這將是更安全的使用:

snprintf(str, sizeof(str), "%d%s", i+1, ".xlxs"); 

這將確保你不走在你的字符數組的限制。

具體而言,您至少需要char[7]才能持有"1.xlxs\0"