我正在尝试创建一个快速函数,它通过数字获取字符串中的单词/参数:

char* arg(char* S, int Num) {
    char* Return = "";
    int Spaces = 0;
    int i = 0;
    for (i; i<strlen(S); i++) {
        if (S[i] == ' ') {
            Spaces++;
        }
        else if (Spaces == Num) {
            //Want to append S[i] to Return here.
        }
        else if (Spaces > Num) {
            return Return;
        }
    }
    printf("%s-\n", Return);
    return Return;
}

我找不到把这些字符放入Return的方法。我发现很多帖子都建议使用指针或技巧,但每个帖子都有缺陷。我也看到有人说应该使用strcat(),但我不确定我是如何在这样的循环中使用它的。

最佳答案

我不会声称理解您要做的事情,但您的代码有两个问题:
您正在将只读字符串分配给Return;该字符串将位于
二进制的数据段,它是只读的,如果你试图修改它,你会得到一个segfault。
for循环是O(n^2),因为strlen()是O(n)
有几种不同的方法可以解决“如何返回字符串”问题。例如,您可以:
按照建议,使用malloc()/calloc()分配新字符串
使用类似的asprintf(),但如果需要,可以提供格式
将输出字符串(及其最大大小)作为参数传递给函数
前两个要求调用函数free()返回值。第三个允许调用者决定如何分配字符串(堆栈或堆),但需要某种关于输出字符串所需最小大小的约定。

关于c - 在C中将char append 到char *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11334773/

10-12 14:17