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



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

sprintf调用中的sizeof(v)是一个char指针的大小,在您的情况下可能是4,这意味着格式化的字符串最多包含3个字符,或者0到999之间的数字。要修复此问题,请使用与分配内存相同的长度:

    size_t len = cifre(i)+10;
    v = (char*)malloc(len);
    snprintf(v,len,"%ld",i);

snprintf(v,sizeof(v)没有多大意义,因为sizeof(v)返回指针的大小(vchar*),而不是动态分配的数组的大小。因此snprintf()仅限于打印sizeof(v)-1个字符,或3位数字和NUL字符串终止符。3位数字表示000到999之间的值,精确到1000。

相关内容

  • 没有找到相关文章

最新更新