簡體   English   中英

在 C 中連接分隔的 char** 元素

[英]Concatenate separated char** elements in C

我有以下情況:

An initial char* original_string = "@person Hello person; Welcome to the chat!";

我需要使用"@person"部分,所以我有一個拆分 function 將采用original_string並將其拆分為空格。 基本上char** split_original_string = split_string(original_string, " "); 將返回:

    split_original_string[0] = "@person";
    split_original_string[1] = "Hello";
    split_original_string[2] = "person!";
    split_original_string[3] = "Welcome ";
    split_original_string[4] = "to";
    split_original_string[5] = "the";
    split_original_string[6] = "chat!";

從現在開始我有@person我很高興! 但我意識到消息應該是original_string的 rest 意思是"Hello person! Welcome to the chat!" .

我試圖使用類似的東西

char* message = malloc(256); // 256 is just for testing purposes
strncpy(message , original_string + strlen(split_original_string[0]), strlen(original_string ));

但它導致空char*因為顯然當將original_string傳遞給split_original_string function 時,它發生了變化,並且它的長度等於split_original_string[0]的長度。

我的問題是:有沒有辦法使用for循環或任何其他循環將char**元素的 rest 連接到單個char*中?

任何幫助表示贊賞!

在這里,您有一個輕量級的程序來歸檔它。 沒有外部功能

char *mySpecialstrcat(char *str, const char *src, int appendSpace)
{
    while(*str++ = *src++);
    if(appendSpace) *(str - 1) = ' ';
    *str = 0;
    return str;
}

char *combine(char *buff, char **strings)
{
    char *end = buff;
    while(*strings)
    {
        end = mySpecialstrcat(end, *strings, strings[1] != NULL);
        strings++;
    }
    return buff;
}

int main(void)
{
    char *buff = malloc(256);
    char *split_original_string[8];
    split_original_string[0] = "@person";
    split_original_string[1] = "Hello";
    split_original_string[2] = "person!";
    split_original_string[3] = "Welcome ";
    split_original_string[4] = "to";
    split_original_string[5] = "the";
    split_original_string[6] = "chat!";
    split_original_string[7] = NULL;


    printf("%s\n", combine(buff, split_original_string));
    free(buff);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM