程序不输出完整的字符串

时间:2015-12-15 12:42:33

标签: c string if-statement calloc

我正在学习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;
}

1 个答案:

答案 0 :(得分:3)

calloc()将返回0已填充的内存。因此,在您的情况下,如果if检查都不匹配(在randbroj == 10的情况下会发生这种情况),niz[i]将不会获得任何新值并保持默认值0 value,它是null-terminator的值。

你的字符串在那里结束。

解决方案:添加所有可能值的检查,包括10.