0

我是 C 的新手。

我正在尝试获取一个 char 数组(一个字符串)并通过分隔符将其分解为 2 个字符串。这是我的代码:

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

int main() {
    char line_array[260];
    char *line = line_array;
    scanf("%s", line_array);
    char *line2 = strdup(line);
    char *command = strtok(line2, " "); // WORKS FINE = open
    printf("%s %c\n", command, *(line+4)); // PRINTS: open (prints only command, *(line+4) is empty)
    return 0;
}

在我得到字符串的第一部分(它说“工作正常=打开”)后,我想要实现的是打印从 command_array[strlen(command)] 到数组末尾的所有字符,但没有我尝试过的工作。

4

6 回答 6

1

看了你新的更新问题和代码,终于知道你的问题scanf了,您输入“abcdefg 9”,scanf("%s",value)只会得到abcdefg值,并将“9”留在标准输入缓冲区中。因此您需要使用gets(value)来获取所有输入,然后strtok

于 2012-09-22T08:11:15.930 回答
0

你可以使用:

printf("%s\n", filename+4);

它将字符串文件名从第 5 个字符打印到字符串结尾

%c 只打印一个字符

*(filename+4) 从字符串文件名中获取第 5 个字符代码。

filename+4 给出字符串文件名的第 5 个字符的地址

于 2012-09-22T07:44:46.333 回答
0

在 C 的表达式中,所有表达式chars都隐式转换为intsfirst。当char参数传递给可变参数函数(如printf())时,它们也会隐式转换为ints. 但我看不出有什么问题。

但是,我看到的explodestr()是缺少返回 a 的 return 语句char,这恰好是一个整数。

于 2012-09-22T07:48:58.483 回答
0

如果您的目标是读取一行并将其拆分为第一个空格字符,您可以尝试:

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

int main() {
  char* line = NULL;
  size_t linesiz = 0;
  if (getline(&line, &linesiz, stdin) > 0) {
    char* space = strchr (line, ' ');
    if (space) {
       *space = (char)0; // to end the chunk before 
       printf ("first chunk is %s\n", line);
       printf ("after space have %s\n", space+1);
    }
  }
  return 0;
}

不要忘记在编译器中启用所有警告并学习如何调试。在 Linux 上,这意味着使用调试器进行编译gcc -Wall -g 和使用。gdb

顺便说一句,如果您知道所有行都以一个单词(不带空格)开头,然后是一些空格字符(如空格、制表符、回车、换行符......),然后是一些整数,您可以声明

int i=0;
char buf[30];
memset (buf, 0, sizeof(buf)); // zero the buf

然后使用

if (scanf("%30s %d", buf, &i)>=2) { /* do something with buf & i */ }

你们很多人想阅读的手册页feature_test_macros(7)

于 2012-09-22T07:49:33.557 回答
0

只是strtok循环调用。如果要解析相同的字符串,请将第一个参数设置为 NULL。这将修改字符串,但我们在此示例中制作了一个副本以供使用。

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

int main(void)
{
    char line_array[260];
    char *line, *p;

    fgets(line_array, sizeof(line_array), stdin);
    line = strdup(line_array);

    p = strtok(line, " ");
    while (p) {
        puts(p);
        p = strtok(NULL, " ");
    }

    free(line);
    return 0;
}
于 2012-09-22T08:42:19.930 回答
0

你的最后一行......应该是

printf( "%s\n", ( line + 4 ) );

,你已经完成了你所期望的。

原因:

1. %c 一次只能打印一个字符。

2. C 语言中字符串总是处理基地址,所以也需要去掉星号。希望你的问题得到解答。

于 2012-09-22T09:04:22.720 回答