您好我的指针有问题!
#include <stdio.h>
#include <stdlib.h>
void test(char **str)
{
*str = (char *)malloc(sizeof(char) * 2);
*str[0] = 'b';
*str[1] = '\0';
}
int main(void)
{
char *str;
test(&str);
printf("%s\n", str);
return (0);
}
所以我在我的函数测试中传递一个非分配字符串的指针,然后我在函数中分配我的字符串并尝试操作它但是这段代码段错误所以我想我错过了我指针上的一些东西:)
你能帮我弄清楚这里发生了什么吗?非常感谢你!
编辑:当我在main中删除我的return(0)时,代码编译并显示我的char *!超级奇怪
答案 0 :(得分:3)
数组下标运算符[]
的优先级高于间接运算符*
。因此,对str
的分配实际上是不正确的:
*(str[0]) = 'b';
*(str[1]) = '\0';
您需要添加括号:
(*str)[0] = 'b';
(*str)[1] = '\0';
答案 1 :(得分:2)
你必须写:
(*str)[0]= 'b';
首先必须取消引用str
,现在索引将适用于目标,即malloc
分配的内存。
答案 2 :(得分:0)
实际上,'str'本身就意味着他对字符数组的定位。 但'str'意味着str的价值。 所以str [0]包含'b'的值,但是当你在str [0](* str [0])之前添加''时,计算机试图找到地址为'b'的值。 但是此过程不允许使用此地址。所以这个程序返回段错误。谢谢。