C语言基础-生成任意长度的字符串
2017-06-02 21:27
337 查看
序言
在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()%62; //随机数生成函数 *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++) { ae4b 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 = '\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 = '\0'; //字符串结束符 return str; }
用数组操作时,数组作为实参传入函数。看到很多地方说:数组作为实参传入函数退化为指针?但是在本程序示例中在函数内对数组进行直接赋值并没有什么问题,所以暂时还不是很理解为什么说退化为了指针。
Acknowledgements:
http://blog.csdn.net/ericzhangyuncsdn/article/details/58604687
2017.06.02
相关文章推荐
- 由一个任意长度字符串生成唯一的32位整数
- Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种
- Java工具类_随机生成任意长度的字符串【密码、验证码】
- 随机生成一个任意长度的字符串
- Java随机密码生成器,Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种
- 生成一个任意长度的随机字符串,包含数字和字母[C语言]
- 生成任意长度的随机字符串
- PHP实现生成任意长度字符串
- 由一个任意长度字符串生成唯一的32位整数
- PHP 生成任意长度的随机字符串
- 生成指定长度随机字符串
- 20161216C语言基础17_字符串处理函数之fgets与gets
- 对任意长度字符串,删除其中的任意的N(N>=0)个字符
- 20161216C语言基础18_字符串处理函数
- 随机生成不同长度的字符串
- python学习——Python中生成一个指定长度的随机字符串
- 根据给定的字符生成指定长度的字符串
- go语言按显示长度截取字符串的方法
- php生成随机字符串 指定长度 可以固定数字 字母 混合
- JAVA语言基础之字符串