我一直在尝试用C / C ++创建一个程序来创建文件,直到进程停止。 文件名从0开始,遵循算术序列。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long cifre(long x) //returns the number of digits a number has
{
int nr = 0;
while (x != 0)
{
x = x/10;
nr++;
}
return nr;
}
int main()
{
long i=0;
FILE* g;
char* v;
char buffer[1025];
int j=0;
for (j=0;j<1024;j++)
buffer[j] = 'x';
while (1)
{
v = (char*)malloc(cifre(i)+10);
snprintf(v,sizeof(v),"%ld",i);
g = fopen(v,"w");
fprintf(g,"%s",buffer);
free(v);
fclose(g);
i++;
}
return 0;
}
问题是程序只创建了1000个文件。
答案 0 :(得分:3)
sprintf调用中的sizeof(v)
是char指针的大小,在你的情况下大概是4,这意味着格式化的字符串最多包含3个字符,或0到999的数字。修复此用法与用于分配内存的长度相同:
size_t len = cifre(i)+10;
v = (char*)malloc(len);
snprintf(v,len,"%ld",i);
答案 1 :(得分:1)
snprintf(v,sizeof(v)
没有多大意义,因为sizeof(v)
返回指针的大小(v
是char*
),而不是动态分配的数组的大小。因此snprintf()
仅限于打印sizeof(v)
- 1个字符,或3个数字和NUL字符串终止符。 3位数字给出的值为000到999,正好是1000。