0

我在尝试将字符串的一部分复制到另一部分时遇到问题。鉴于这两个 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 的字符串的指针的函数。

4

2 回答 2

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;
}
于 2016-09-03T16:02:20.233 回答
1

根据手册strncpy:_

the destination string dest must be large enough to receive the copy

所以在调用之前必须先用mallocfor分配一些内存。usernamestrncpy

于 2016-09-03T15:07:14.227 回答