【问题标题】:extracting substring from string using pointers in C使用C中的指针从字符串中提取子字符串
【发布时间】:2018-09-23 20:38:55
【问题描述】:

我目前正在尝试在缓冲区中提取子字符串。目标是通过空格和符号解析字符串以便稍后编译。我要解析的行是文件的第一行。

void append(char* s, char c)
{
    int len = strlen(s);
    s[len] = c;
    s[len+1] = '\0';
}

int main(void){    
    char str[] = "program example(input, output);";

    char *f = str;
    char *b = str;

    char token[10];

    if(*f != '\0'){
        while (*f != ' ')
        {
            append(token,*f);
            f++;
        }
        f++;
        printf("%s",token);
        token[9] = '\0';
    }
    return 0;
}

我是否清除了错误的令牌字符串?代码只返回:

program

但它应该返回

program
example(input,
output);

【问题讨论】:

    标签: c string pointers buffer


    【解决方案1】:

    您的代码存在一些根本错误(缓冲区溢出的可能性) 在您的 append() 函数等中)。据我了解,我所做的更改足以让代码产生所需的结果。

    int main(void){    
        char str[] = "program example(input, output);";
    
        char *f = str;
    
        char *token=(char *)malloc((strlen(str)+1)*sizeof(char));
        char *b = token;
    
        while(*f != '\0'){
            while (*f && *f != ' ')
            {
                *b++=*f;
                f++;
            }
            if(*f) f++;
            *b=0;
            b=token;
            printf("%s\n",token);
        }
        free(token);
        return 0;
    }
    
    $ ./a.out 程序 示例(输入, 输出);

    【讨论】:

    • 谢谢!我的目标是分离每个令牌。这应该让我现在走上正轨。
    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 2012-09-06
    • 2011-01-19
    • 2011-07-21
    • 1970-01-01
    • 2017-04-01
    • 2015-05-10
    相关资源
    最近更新 更多