C - 这是在以下情况下使用strtok的正确方法

时间:2014-08-17 23:23:56

标签: c strtok

如果我有一个包含10X15的字符串。我想分开10和15.以下代码是否正确。我担心代码的第二部分,就是把“NULL”放在正确的位置。

char * stringSixrows = strtok(stringSix[0], "X");
char * stringSixcollumns = strtok(NULL, "NULL"); 

//我把第二个null放在那里导致它的字符串结束,我不确定它是否正确。

3 个答案:

答案 0 :(得分:1)

我会说获取“指向剩余字符串的指针”的“规范”方法是:

strtok(NULL, "")

strtok在提供的字符串中搜索任何分隔符,因此如果您不提供任何分隔符,则无法找到任何分隔符,因此只会在输入结束时停止字符串。

答案 1 :(得分:0)

示例

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

int main(void){
    char stringSix[] = "10X15";
    char *stringSixrows = strtok(stringSix, "X");
    char *stringSixcolumns = strtok(NULL, "X");

    printf("%s, %s\n", stringSixrows, stringSixcolumns);

    return 0;
}

另一种方式

char stringSix[] = "10X15";
char stringSixrows[3];
char stringSixcolumns[3];
char *p;

if(NULL!=(p = strchr(stringSix, 'X')))
    *p = '\0';
else {
    printf("invalid format\n");
    return -1;
}
strcpy(stringSixrows, stringSix);
strcpy(stringSixcolumns, p+1);

printf("%s, %s\n", stringSixrows, stringSixcolumns);

const char *stringSix = "10X15";
int stringSixrows;
int stringSixcolumns;

if(2==sscanf(stringSix, "%dX%d", &stringSixrows, &stringSixcolumns))
    printf("%d, %d\n", stringSixrows, stringSixcolumns);

答案 2 :(得分:0)

您可以使用strtol将字符串转换为数字以及搜索下一个字符串。下面的代码安全地完成了预期的操作:

    char stringSix[] = "10X15";
    char * pEnd;
    long firstNumber = strtol (stringSix,&pEnd, 10);
    pEnd = strtok(pEnd, "");
    long secondNumber = strtol (pEnd,&pEnd, 10);