为什么要把strncpy和memset放一块, 是因为这两个经常组合起来一起用的。 在strncpy()之前,先memset()一下。 一般是讲各个字节置为0.
首先看看memset()的源码:
void* memset(void* s, int c, size_t n) { unsigned char* p = (unsigned char*) s; while (n > 0) { *p++ = (unsigned char) c; --n; } return s; }
它是将以地址s开始的n个字节的值设置为指定的值c。
void convert_file_path(char *file_path) { char *path = “/home”; memset(file_path, 0×00, sizeof(file_path)); strncpy(file_path, path, strlen(path)); printf(“%s \n”, file_path); }
*(file_path + strlen(path)) = 0;
代码中还犯了一个错误,很明显是在memset()函数。 因为我是一个函数, file_path是一个指针。
所以我memset(file_path, 0×00, sizeof(file_path)),只是将前4字节置为了0。(sizeof(file_path) == 4)。
更正如下:
memset(file_path, 0×00, sizeof(file_path) * 100);
100只是我随便写的数字。 应该是数组的长度。