1

我的问题是关于取消引用 char 指针

这是我的代码 -

#define MAX 10

char s[80]="Hello";

int main(){

    char *stackValue;

    stackValue=&s;//here I assined the address of s to stackValue

    if(!stackValue){

        printf("No place for Value");

        exit(1);

    }

    else{

        printf("\n%s",*stackValue);//This doesn't work with * before it 

        printf("\n%s",stackValue);//This works properly
    }
    return 0;
}

在上面的代码中,我将 S[] 的地址分配给了 stackValue,当我打印 *stackValue 时它不起作用,

但如果我只打印 'stackValue' 那行得通。

当我用整数做同样的事情时

int main(){
    int i=10, *a; 
    a=&i;
    printf("%d",*a);//this gives the value 
    printf("%d",a)//this gives the address
    return 0;
}

是打印字符指针和整数指针是不同的。当我在 int 值中使用 * 时,它会给出值,但当我将它用作 char 指针时会给出错误。

帮帮我?

4

3 回答 3

1

使用第一个代码片段:

stackValue=&s;不正确,因为s它已经是一个 char 数组。如果你这样写,那么stackValue就变成了指向char 的指针(而不是指向 char 的指针)。

通过更改为来解决此问题stackValue=s;

此外,再次%s期望指向 char 的指针(不是指向 char 的指针) - 这解释了为什么这不起作用 printf("\n%s",*stackValue); // this doesn't work

你需要printf("\n%s",stackValue);


使用第二个代码片段。

a=&i;没关系,因为i它是一个单一的int,而不是一个数组。

于 2016-11-29T06:59:53.923 回答
0

"%s"格式说明符printf总是需要一个char*参数。所以这是有效且正确的声明

printf("\n%s",stackValue);

在第一个语句中,您正在传递值,因此它会给您未定义的行为。

于 2016-11-29T07:16:21.393 回答
0

你想要做的是:

int main(void)
{
    char a_data = "Hello, this is example";
    char *pa_stack[] = {a_data};

    printf("We have: %s\n", *pa_stack);
}
于 2016-11-29T07:21:49.380 回答