C语言基础-生成任意长度的字符串

xiaoxiao2021-02-28  11

序言

在C语言编程中,有时候需要生成任意长度的字符串以供使用。文章给出任意长度字符串(包含字母和数字)生成的简单程序。

指针实现

主函数如下 char *randstr(char *pointer, int n) { int i,randnum; char str_array[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (i = 0; i < n; i++) { randnum = rand()%62; //随机数生成函数 *pointer = str_array[randnum]; //从字符数组中取值 pointer++; } *pointer = '\0'; //字符串结束符 return (pointer - n); //返回指向随机字符串的指针首地址 }

rand()为虽然为随机数生成函数,但由于每次执行前未设置随机数种子,所以生成的随机数实际为伪随机数-每次相同,为了生成真正的随机数,我们采用srand()函数来设置随机数种子,通常以时间作为随机数种子。

将主函数修改如下 char *randstr(char *pointer, int n) { int i,randnum; char str_array[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (i = 0; i < n; i++) { srand(time(NULL)); //以当前时间来设置随机数种子 usleep(100000); //每隔100ms更新一次时间 randnum = rand()b; //随机数生成函数 *pointer = str_array[randnum]; //从字符数组中取值 pointer++; } *pointer = '\0'; return (pointer - n); }

rand()和srand()函数需要添加头文件stdlib.h,time()函数需要添加头文件time.h,usleep()函数需要添加头文件unistd.h

完整程序如下 #include <stdio.h> #include <stdlib.h> //rand(),srand() #include <time.h> //time() #include <unistd.h> //sleep() //随机字符串生成函数声明 char *randstr(char *pointer, int n); int main() { char *payload; payload = (char *)malloc(sizeof(char) * 100); int n = 50; //设置字符串长度 printf("%c\n", *(strn(payload, n))); //输出随机生成的第一个字符 free(payload); //释放堆空间 return 0; } char *randstr(char *pointer, int n) { int i,randno; char str_array[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (i = 0; i < n; i++) { srand(time(NULL)); sleep(1); //每隔1s更新一次时间 randnum = rand()%62; printf("%d\n", randnum); //检查每次生成的随机数 *pointer = str_array[randnum]; //从字符数组中取值 pointer++; } *pointer = '\0'; return (pointer - n); }

数组实现

有时候我们需要生成任意长度的字符串并给到数组,用指针操作不是很直接,可以使用数组来实现

主函数如下 char *randstr(char str[], int n) { int i,randum; char str_array[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (i = 0; i < n; i++) { srand(time(NULL)); //usleep(100000); randnum = rand()%62; printf("%d\n", randnum); str[i] = str_array[randnum]; //数组作为函数参数退化为指针, } str[n] = '\0'; return str; //这个时候直接返回数组首地址 } 完整程序如下 #include <stdio.h> #include <stdlib.h> //rand(),srand() #include <time.h> //time() #include <unistd.h> //sleep() //随机字符串生成函数声明 char *randstr(char str[], int n); int main() { char payload[100]; int n = 50; randstr(payload,n); //函数调用 printf("%c\n", payload[2]); //输出任意元素 return 0; } char *randstr(char str[], int n) { int i,randnum; char str_array[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (i = 0; i < n; i++) { //srand(time(NULL)); //sleep(1); randnum = rand()%62; str[i] = str_array[randnum]; } str[n] = '\0'; //字符串结束符 return str; }

用数组操作时,数组作为实参传入函数。看到很多地方说:数组作为实参传入函数退化为指针?但是在本程序示例中在函数内对数组进行直接赋值并没有什么问题,所以暂时还不是很理解为什么说退化为了指针。

Acknowledgements: http://blog.csdn.net/ericzhangyuncsdn/article/details/58604687

2017.06.02

转载请注明原文地址: https://www.6miu.com/read-1100003.html

最新回复(0)