C解析功能不起作用

时间:2012-12-10 05:22:29

标签: c parsing pointers char

我正在尝试编写一个将用于演示的程序  一些基本的解析,但C不是我的主要语言。这是一个问题,它是这样的,我正试图让它打印这个输出。

输出: FOO / 4200,FOO,4200

它假设显示组合,然后每个单独。

char *afterSeparator(char *complete)
{
    char *separator = strchr(complete, '/');
    if(slash) 
    {
    return separator + 1;
    }
    return complete;
}

char *beforeSeparator(char *complete)
{
    char *separator = strchr(complete, '/');
    if(separator)
    {
        *separator = '\0';
    }
    return complete;
void printParts(void)
{
    char original[] = "FOO/4200";
    char *preSeparator = beforeSeparator(original);
    char *postSeparator = afterSeparator(original);
    printf("%s, %s, %s\n", original, preSeparator, postSeparator);
}

3 个答案:

答案 0 :(得分:1)

使用“beforeSeparator”时,用'\ 0'覆盖'/'。这将终止中间的字符串。 当你产生“afterSeparator”时,你不再有字符串中的'/'。

答案 1 :(得分:1)

在致电afterSeparator之前致电beforeSeparator

你的所有订单都应该是

  1. 首次打印原件
  2. 调用afterSeparator
  3. 调用beforeSeparator
  4. 打印preSeparator& postSeparator
  5. beforeSeparator/替换为\0。因此,在调用afterSeparator后调用beforeSeparator将无效。调用original后打印beforeSeparator也无法提供正确的结果,因为FOO会打印\0

答案 2 :(得分:0)

我为你做了一个样本。

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

int main()
{
char str[100] = "Hello/Jay";

printf("\n%s\n", strrchr(str, '/')+1);
str[strlen(str)-strlen(strchr(str, '/'))] = '\0';
printf("\n%s\n", str);

return 0;
}

根据您的需要进行修改。