首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言字符串分割並存入字符串數組完整實現

     編輯:程式設計綜合問答

核心函數:strtok 分割

#include <stdio.h>
#include <string.h>

void split(char **arr, char *str, const char *del) {
    char *s = strtok(str, del);
    while (s != NULL) {
        *arr++ = s;           // 保存分割後的指針
        s = strtok(NULL, del); // 繼續分割
    }
}

完整示例程序

int main() {
    char str[] = "10,20,30,40,50";  // 必須可修改(strtok 會修改原字符串)
    char *arr[10];                  // 指針數組存儲分割結果
    const char *del = ",";
    int i = 0;

    split(arr, str, del);

    while (i < 10 && arr[i] != NULL) {
        printf("arr[%d] = %s\n", i, arr[i]);
        i++;
    }
    return 0;
}

關鍵點詳解

進階:保留空字段的手寫分割

int split_keep_empty(char **out, const char *str, char delim, int max) {
    int count = 0;
    const char *start = str;
    while (*str && count < max - 1) {
        if (*str == delim) {
            int len = str - start;
            out[count] = malloc(len + 1);
            memcpy(out[count], start, len);
            out[count][len] = '\0';
            count++;
            start = str + 1;
        }
        str++;
    }
    // 最後一段
    if (count < max) {
        int len = str - start;
        out[count] = malloc(len + 1);
        memcpy(out[count], start, len);
        out[count][len] = '\0';
        count++;
    }
    out[count] = NULL;
    return count;
}

內存管理提醒

  • strtok 版本:無需 free,指向原數組內存
  • 手寫版本:必須 free 每個 out[i]
  • 若需持久化副本:strdup(s) 或 malloc+strcpy

總結

C 語言分割字符串存入數組:strtok + 指針數組 最簡潔高效。注意原串修改、線程安全、指針生命週期。生產代碼建議封裝為安全的工具函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
點說明
strtok 修改原串將分隔符替換為 \0,原字符串被破壞,需備份
非線程安全內部靜態狀態,多線程需用 strtok_r (POSIX) 或 strtok_s (C11)
連續分隔符視為一個分隔符(跳過空字段),如需保留空字段需手寫解析
返回指針指向原字符串內部,原串釋放/修改會導致懸空指針