字符串采用以下形式:
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表示“为类似函数的宏调用提供了太少的参数”&& '表达结果未使用'。
但是它们的语法完全相同......有人请告诉我哪里出错了?
答案 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);