无法创建超过1000个文件(C ++程序)

时间:2013-02-09 10:12:46

标签: c file

我一直在尝试用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个文件。

2 个答案:

答案 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)返回指针的大小(vchar*),而不是动态分配的数组的大小。因此snprintf()仅限于打印sizeof(v) - 1个字符,或3个数字和NUL字符串终止符。 3位数字给出的值为000到999,正好是1000。