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

How can I copy 2 int from a string?

字符串是这样的形式:

123 456\n

我的基本思路是通过for循环找到空白:

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

对于第二个整数,我又做了一次:

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

但是我第二次这样做,Xcode说'too few arguments provided to function-like macro invocation' && 'expression result unused'。

但它们的语法完全相同...谁能告诉我哪里做错了?

不需要那个,使用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;
}

如果您的字符串只有整数,您可以使用 strtok() 函数,其中 returns 个标记由定界符分隔。所以你可以为分隔符添加白色 space.

例如:

#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 指针。

你的方式(固定)

char *str = "123 456\n";

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

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

我的方式

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

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