C传递char *作为地址

时间:2012-12-11 13:10:54

标签: c argument-passing memory-address

我正在尝试传递一个char *并在另一个函数中更改它,但不知何故它不断给出seg错误。

完整代码是:

#include <stdio.h>

void getString(char** str) {
    *str[0] = '$';
    char c;
    int i = 1;
    while ((c = getchar()) != '$') {
        if (c != '\n') {
            *str[i-1] = c;
            i++;
        }
    }
    *str[i] = '\0';
}

int main (int argc, char *argv[]) {

    char* str =  (char*)malloc(200 * sizeof(char));
    while (1) {
        getString(&str);
        printf("String: %s\n",str);
    }
    return 0;
}

如果我从str [0] ='$'取*,它会发出一个警告,将指针传递给整数。

Dunno,我搞砸了。

2 个答案:

答案 0 :(得分:4)

数组索引[],运算符的优先级低于解除引用运算符*

因此,您必须更改代码

 (*str)[0] = '$';
 (*str)[i-1] = c;
 (*str)[i] = '\0';

在你的情况下,你不需要传入指针的地址,只需传递指针:

getString(str);

并将其作为

访问
str[0] = '$';  
str[i-1] = c;
str[i] = '\0';

由于您正在使用malloc(),请务必添加#include <stdlib.h> 如果你没有强制转换malloc的返回值,那么C中就不需要了 对此发出了警告。

答案 1 :(得分:0)

您想要更改现有缓冲区的内容而不是创建然后返回新缓冲区,以便您可以将char*传递给getString而不是

#include <stdio.h>

void getString(char* str) {
    str[0] = '$';
    char c;
    int i = 1;
    while ((c = getchar()) != '$') {
        if (c != '\n') {
            str[i-1] = c;
            i++;
        }
    }
    str[i] = '\0';
}

int main (int argc, char *argv[]) {

    char* str =  malloc(200);
    while (1) {
        getString(str);
        printf("String: %s\n",str);
    }
    return 0;
}

请注意,我还对内存分配进行了一些更改。 sizeof(char)保证为1,因此可以省略,您无需在C中转换malloc的返回值。