如何修复C中的指针错误?

时间:2014-03-06 19:44:48

标签: c

我开始学习C中的指针。

如何修复函数x()中的错误?

这是错误:

Error: a value of type "char" cannot be assigned to an entity of type "char *".

这是完整的来源:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

void x(char **d, char s[]) {
    d = s[0]; // here i have the problem
}

void main() {
    char *p = NULL;
    x(&p, "abc");
}

3 个答案:

答案 0 :(得分:3)

在函数x()中传递d char **(指向字符串指针的指针)和char s[]char数组,传递方式与指向char)的指针类似。

所以在行:

d = s[0];

s[0]char,而char **d是指向char的指针。这些是不同的,编译器说你不能从一个分配到另一个。

但是,你的编译器真的警告你如下吗?

  

Error: a value of type "char" cannot be assigned to an entity of type "char *"

鉴于代码示例,最后应该说char **

认为你要做的是x做的是将作为第二个参数传递的字符串的地址复制到第一个指针中。那将是:

void x(char **d, char *s)
{
    *d = s;
}

这使得调用者中的p指向常量xyz字符串,但不会复制内容。

如果想要复制字符串的内容:

void x(char **d, char *s)
{
    *d = strdup(s);
}

并确保您记住free()main()的返回值,并在顶部添加#include <string.h>

答案 1 :(得分:-1)

这是你可以做的,所以它会编译成两个版本。

第1版。

void x(char **d, char s[]) {
    d = (char**)s[0];
}

或第2版。

void x(char **d, char *s) {
    *d = s; 
}

希望这有帮助。

答案 2 :(得分:-2)

更合适的方法是使用strcpy

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

void x(char **d) {
    *d = malloc(4 * sizeof(char));        
    strcpy(*d, "abc");
}

int main() {
    char *p;
    x(&p);
    printf("%s", p);
    free(p);
    return 0;
}

输出:abc