我正在学习C语言,在打印随机生成的字符串时遇到了一个问题。
下面的代码只打印出前89个字符,我需要得到1000个字符。
我试过寻找类似的问题和查找c教程,但找不到解释。如有任何帮助,我们将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    srand(1000);
    int i;
    char *niz;
    niz = calloc(1001, sizeof(char));
    for (i = 0; i < 1000;i++){
        int randbroj = rand() % 62;
        if (randbroj < 10){
            niz[i] = randbroj + 48;
        }
        if (randbroj > 10 && randbroj < 36){
            niz[i] = randbroj + 55;
        }
        if (randbroj > 35 && randbroj < 62){
            niz[i] = randbroj + 61;
        }
    }
    niz[1000] = '\0';
    printf("%s",niz);
    return 0;
}

最佳答案

calloc()将返回已满的内存。因此,在您的情况下,如果没有一个0检查匹配(在if==10的情况下会发生这种情况),则randbroj将不会获得任何新值,并保持默认的0值,即空终止符的值。
你的绳子就在那儿。
解决方案:添加对所有可能值的检查,包括10。

关于c - 程序不输出完整的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34289601/

10-10 22:44