c - 修改现有的 char* 或创建一个 tmp char*?

标签 c pointers char c-strings function-declaration

某些语言(例如 Java)要求您创建另一个字符串才能解决某些类型的问题。但是对于 C 语言,什么时候应该创建另一个字符串,什么时候应该简单地修改现有字符串?

以下代码为例:

    char *removeTags(char *s, int length)
{
    if (!s || length < 1)
    {
        exit(EXIT_FAILURE);
    }
    char *tmp = calloc(length, sizeof(char));
    int count = 0;
    for (int i = 0; i < length; i++)
    {
        if (s[i] == '<')
        {
            for (int k = i; k < length; k++)
            {
                if (s[k] == '>')
                {
                    i = k;
                    break;
                }
            }
        }
        else if (s[i] != '>' && s[i] != '<')
        {
            tmp[count] = s[i];
            count++;
        }
    }
    return tmp;
}

它应该被调用如下:

char *foo = (char *)calloc(length, sizeof(char)); foo = removeTags(foo, strlen(foo));

如果我只是修改 char *s 而不是创建 char *tmp 来帮助我,会更好吗?

最佳答案

如果函数处理字符串,那么第二个参数是多余的并且容易出错

char *removeTags(char *s, int length)

如果你想创建一个新的字符串,那么函数必须像这样声明

char * removeTags( const char *s );

即函数参数应具有限定符 const

如果您想就地更改字符串,则必须像这样声明该函数

char * removeTags( char *s );

请注意,您不得更改字符串文字。

如果您还向函数传递字符串文字,则必须像这样声明该函数

char * removeTags( const char *s );

您可以定义这两个函数,但在这种情况下您需要使用不同的函数名称。

关于c - 修改现有的 char* 或创建一个 tmp char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71728611/

相关文章:

c++ - 边界噪声去除实现

c - 为什么负值会给从具有给定总和的数组中查找值对的程序带来段错误?

c - 递增指针的指针

c++ - 复制一个指针,改变拷贝指向的内容而不改变原始指针?

c - 我无法使用 scanf 将名称输入到 char 数组中

c - 如何正确地将程序参数 *char 转换为 int?

android - 如何使 native C 可执行文件在 Android 中永远运行?

c++ - 如果 new 失败,是否需要检查指针有效性?

c - c 中的 char 指针数组

c++ - Caesar Cipher C++(使用字符指针和移位作为参数)