我在尝试将字符串的一部分复制到另一部分时遇到问题。鉴于这两个char指针:
line points at string cointaining: "helmutDownforce:1234:44:yes"
username points at: NULL
这是我的函数,它将这些指针作为输入:
char* findUsername(char* line, char* username){
char* ptr = strstr(line, ":");
ptrdiff_t index = ptr - line;
strncpy(username, line, index);
return username;
}
我在strncpy期间遇到分段错误。怎么会?我想要的结果是返回指向包含helmutDownforce的字符串的指针的函数。
答案 0 :(得分:2)
此函数分配并返回一个新字符串,因此为避免内存泄漏,调用函数必须负责最终释放它。如果行中没有分隔符冒号,它将返回NULL
。
char* findUsername(char* line){
char* ptr = strchr(line, ':');
/* check to make sure colon is there */
if (ptr == NULL) {
return NULL;
}
int length = ptr - line;
char *username = malloc(length+1);
/* make sure allocation succeeded */
if (username == NULL) return NULL;
memcpy(username, line, length);
username[length] = '\0';
return username;
}
答案 1 :(得分:1)
根据strncpy
的{{3}}:
the destination string dest must be large enough to receive the copy
因此,在调用malloc
之前,您必须首先使用username
为strncpy
分配一些内存。