c语言生成随机字符串

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    char *p;
    int n;
    while(~scanf("%d",&n))
    {
        p=(char *)malloc(n*sizeof(char));
        if(p==NULL)
        {
            printf("No Enough Memory\n");
            exit(0);
        }
        srand((unsigned)time(0));
        int i,index;
        for(i=0; i<n; i++)
        {
            index=rand()%2;
            if(index==1) p[i]='A'+rand()%26;
            if(index==0) p[i]='a'+rand()%26;
        }
        printf("%s\n",p);
        free(p);
    }
    return 0;
}

为啥输出结果里会含有一个'?',而且输出有时还会乱码?刚学到这不知道哎

可以参考这个问题的详细论述

https://mp.weixin.qq.com/s?__biz=MzIzODAxNjE1OQ==&mid=2247484919&idx=1&sn=f169b3f72aeab39b6803f49ae9badea2&chksm=e93e8607de490f11f4e268dcf969013fa6d2bc1373f1b3b0ee1c985b29d6f2bc0764a9ac7bcf&token=283408310&lang=zh_CN#rd

一个字符串最后要用 0 结尾,否则就会带出来内存后面的随机字符,例如乱码。 

所以你要申请 n + 1 个位置。 然后最后的位置放 0. 

 

p = (char*)malloc(n * sizeof(char) + 1);

如果申请内存成功,就做这个: p[n] = 0; 

你可以在结尾输出printf("\0");

谢谢啦(抱拳)