c - 缩短 C 字符串以从第一次出现的内容中排除更多字符

标签 c string

我有一个 C 字符串,我想缩短它,以便它从第一次出现的“$”处被剪切。这是我的代码:

int char_search(char exp[], int s, char what) {
    int i, occurrence=-1;
    for (i=0; i < s && occurrence == -1; ++i)
        if (exp[i] == what)
            occurrence = i;

    return occurrence;
}

int shorten(char *exp, int maxlength, char *exp_new) {
    int l, i;
    l = char_search(exp, maxlength, '$');
    exp_new = (char *) malloc((l+1)*sizeof(char));
    exp_new[l] = '\0';
    for (i = 0; i<l; i++) 
        exp_new[i] = exp[i];

    return l;
}

问题是它开始覆盖exp_new指针地址,并且只将第一个字符复制到实际数组中。另外,exp_new 由于某种原因返回 NULL。 (字符串长度可能不正确,但这不应该把整个事情搞砸。)

最佳答案

当您想通过函数参数返回指针时,您需要使用双重间接寻址:

int shorten(char *exp, int maxlength, char **exp_new)

更好的签名是

char* shorten(char *exp, int maxlength, int *length)

直接返回结果的地方。

编辑:当函数名称“shorten”描述其要执行的操作时,明显的结果应该是缩短的字符串。搜索函数产生的字符串长度可以忽略不计。可以更改该函数,以便长度参数可以接受 NULL 指针。在这种情况下,如果调用者不感兴趣,您可以省略长度结果。但这取决于环境。

关于c - 缩短 C 字符串以从第一次出现的内容中排除更多字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19926214/

相关文章:

c - 用 C 编写一个程序,删除字符串中的前导空格和尾随空格

c - 缓冲区溢出和集中错误处理

c - Scanf - 值和算术的介绍

c++ - 如何强制用户/操作系统输入 Ascii 字符串

string - 如何找到字符串的不同子序列的数量?

c - 如何用C语言编写求和函数的代码?

我可以使用 `va_list` 两次,如下 :

c++ - std::string 是文字类型吗?

c++ - 指针究竟如何遍历字符串/数组?

java - @Value 在单元测试中返回 null