簡體   English   中英

如何使用strstr循環字符串以查找C中的子字符串

[英]How to loop a string using strstr to find substrings in C

我正在嘗試從較大的字符串中查找信息的不同子字符串,其中信息之間用":"分隔

例如: username:id:password:info

如何在C中使用strstr函數循環此字符串以將信息提取到不同的子字符串中?

到目前為止,我已經嘗試過類似的方法:

char string[] = "username:id:password:info"
char *endptr;

if((endptr = strstr(string, ":")) != NULL)  {
  char *result = malloc(endptr - string + 1);
  if(result != NULL) {
    memcpy(result, string, (endptr - string));
    result[endptr - string] = '\0';
    username = strdup(result);
    free(result);
  }
}

我想使此loopable提取所有子字符串。

從較大的字符串中查找信息的不同子字符串,該較大的字符串中的信息用“:”分隔
如何在C中使用strstr函數循環此字符串以將信息提取到不同的子字符串中?

strstr()並不是執行此任務的最佳工具,但可用於查找":"
相反,我建議strcspn(string, "\\n")因為目標是找到下一個":" null字符

OP'c代碼接近形成循環,但還需要處理最后一個標記,該標記缺少最后的':'

void parse_colon(const char *string) {
  while (*string) { // loop until at the end
    size_t len;
    const char *endptr = strstr(string, ":"); // much like OP's code
    if (endptr) {
      len = (size_t) (endptr - string);  // much like OP's code
      endptr++;
    } else {
      len = strlen(string);
      endptr = string + len;
    }
    char *result = malloc(len + 1);
    if (result) {
      memcpy(result, string, len);
      result[len] = '\0';
      puts(result);
      free(result);
    }
    string = endptr;
  }
}

int main(void) {
  parse_colon("username:id:password:info");
}

產量

username
id
password
info

暫無
暫無

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

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