1.字符串判断是否为空
两种方法:
strcmp(str, “0”);返回0 为空
str[0] == ‘\0’ 相等则为空。
第一种方法调用函数,始终还是有消耗的,建议使用第一种。
2.字符数组赋值
两种方法:
1)定义时赋值
char a[10] = "hello";
char a[10] = {'h','e','l','l','o'};
2)用strcpy
char str[10];
strcpy(str, "hello");
3.sprintf和snprintf函数
首先说snprintf函数要安全一些,看函数的声明
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
snprintf多传了一个size参数,这就使snprintf函数没有了字符串缓冲区溢出的风险。如果要拷的字符串长度大于size,snprintf函数会截断字符串,并在最后添加一个尾0.但是snprintf返回的int是要拷贝的字符串的长度,而不是实际拷进str的长度,这点尤其要注意。而sprintf返回的则是实际拷到str的长度。
4.strcpy和strncpy函数
char *strcpy(char * desc, char *src);
char *strncpy(char * desc, char * src, size_t n);
strcpy在拷贝的时候会一直拷贝,知道遇见’\0’,显然这种拷贝是非常不安全的。
strncpy增加了一个参数,但是此函数也是不检查是否越界的,n只是指定要拷几个字符到desc,所以此函数正确的用法memset(desc, 0, sizeof(desc));
strncpy(char *desc, char *src, sizeof(desc) - 1);着用就比较安全了。
5.输入函数
fgets函数
char *fgets(char *buf, int bufsize, FILE *stream);`
使用时需要注意的是fgets函数会将键盘输入的\n回车符写到buffer中,因此如果我们期望的是回车符前面的字符串,我们需要将最后的回车符换成尾0,如下:
char dbDomain[1024] = {0};
printf("please configure the DB_domainSocket\n");
fgets(dbDomain, 1024, stdin);
dbDomain[strlen(dbDomain) - 1] = '\0';
更新中。。
stdin和stdin_fileno区别。