如何从字符串中复制2个int?

时间:2016-03-21 00:01:10

标签: c string copy strncpy

字符串采用以下形式:

123 456\n

我的基本想法是通过for循环找到空白:

int i=0;
for (i=0;isdigit(str[i]);i++){
}
char *dest1;
strncpy(dest1, str, i-1);
dest1[i]='\0';

对于第二个int,我再次这样做了:

int j=i+1;
for (;isdigit(str[j]);j++){
}
char *dest2;
strncpy(dest2; (str+j); j-i);
dest2[j-i+1]='\0';
int from = atoi(dest1);
int to = atoi(dest2);

但是我第二次这样做,Xcode表示“为类似函数的宏调用提供了太少的参数”&& '表达结果未使用'。

但是它们的语法完全相同......有人请告诉我哪里出错了?

3 个答案:

答案 0 :(得分:1)

不需要,请使用sscanf()

int value;
int count;
char *pointer;
char str[] = "123 456";

pointer = str;
while (sscanf(pointer, "%d%n", &value, &count) == 1)
{
    fprintf(stdout, "%d\n", value);
    pointer += count;
}

答案 1 :(得分:0)

如果你的字符串只有整数,你可以使用strtok()函数,它返回由分隔符分隔的标记。所以你可以添加白色空间的分隔符。

例如:

#include <string.h>

char str[] = "123 456 789";
char *token;
int number;

token = strtok(str, " ");

for(int i=0; i < 2; i++){
   number = atoi(token);
   printf("%d\n", number);
   token = strtok(NULL, " ");
}

这将打印出来:

123
456
789

请注意strtok()仅在第一次调用时获取字符串。然后你必须使用NULL直到特定字符串的结尾 - 要么因为你计算(猜测,知道)有多少条目,要么因为strtok()返回了一个NULL指针。

答案 2 :(得分:0)

你的方式(固定)

char *str = "123 456\n";

int i=0;
for (i=0; isdigit(str[i]); i++){
}
char dest1[4];
strncpy(dest1, str, i);
dest1[i]='\0';

int j=i+1;
for (;isdigit(str[j]);j++){
}
char dest2[4];
strncpy(dest2, str+i+1, j-i-1);
dest2[j-i-1]='\0';
int from = atoi(dest1);
int to = atoi(dest2);

我的方式

int from, to;
char *str = "123 456\n";

int ret = sscanf(str, "%d %d", &from, &to);