【问题标题】:undifined sized string split in c without strtok未定义大小的字符串在没有strtok的c中拆分
【发布时间】:2014-08-27 07:02:35
【问题描述】:

我有一个字符串:

 char *s = "asdf:jhgf";

我需要把它分成两个标记:

token[0] = "asdf";
token[1] = "jhgf"; 

我在使用 strtok() 时遇到问题。

【问题讨论】:

  • strtok not working.你试过什么?
  • 阅读strchr。还是只使用循环?
  • size of string not predefined 可以通过strlen获取字符串长度。
  • 如果你试图在字符串文字上做strtok...不要这样做

标签: c strtok


【解决方案1】:

你可以使用简单的sscanf():

char token[2][80];

if(sscanf(s, "%[^:]:%s", token[0], token[1]) == 2)
{
  printf("token 0='%s'\ntoken 1='%s'\n", token[0], token[1]);
}

请注意,第一次转换是使用%[^:] 扫描直到(但不包括)冒号完成的。然后我们跳过冒号,扫描一个普通的字符串。

【讨论】:

  • @MattMcNabb 因为我的咖啡还没喝完。 :) 我会解决的,谢谢。
【解决方案2】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char *s = "asdf:jhgf";
    char *token[2];
    char *p = strchr(s, ':');
    size_t len1 = p-s, len2 = strlen(p+1);
    token[0] = malloc(len1+1);
    token[1] = malloc(len2+1);
    memcpy(token[0], s, len1);
    token[0][len1]=0;
    memcpy(token[1], p+1, len2+1);
    puts(token[0]);
    puts(token[1]);
    free(token[0]);free(token[1]);
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多