首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C:这个char指针赋值有什么问题?

在C语言中,char指针是用来指向字符数组或字符串的变量。当给一个char指针赋值时,需要注意以下几个问题:

  1. 内存分配问题:在给char指针赋值之前,需要确保指针指向的内存空间已经被正确分配。如果没有分配足够的内存空间,赋值操作可能会导致内存越界或者访问非法内存,从而引发程序崩溃或者产生不可预测的结果。
  2. 字符串长度问题:如果给char指针赋值的是一个字符串,需要确保字符串的长度不超过指针所指向的内存空间的大小。如果字符串长度超过了内存空间的大小,会导致内存越界,可能会覆盖其他变量的值或者引发程序崩溃。
  3. 字符串结束符问题:在给char指针赋值字符串时,需要确保字符串以'\0'(空字符)结尾。如果没有正确添加字符串结束符,可能会导致字符串操作函数无法正常工作,或者在打印字符串时出现乱码。
  4. 指针空值问题:在给char指针赋值之前,需要确保指针不为空。如果指针为空,赋值操作会导致空指针异常,从而引发程序崩溃。

综上所述,给char指针赋值时需要注意内存分配、字符串长度、字符串结束符和指针空值等问题,以确保程序的正确性和稳定性。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c语言中指针赋值问题,关于C语言指针赋值的问题「建议收藏」

为方便各位小伙伴更好的学习C语言,武林技术小编为此给大家整理了一批资料,供大家交流学习,下面就跟随武林技术频道的编辑一起来先来看看关于C语言指针赋值的问题。...= ‘/0’){ printf(“%c”, *p); printf(“%c”, *(p+1)); ++p; } } 警报如下: test.c:21: 警告: 赋值时将指针赋给整数,未作类型转换 test.c...:22: 警告: 赋值时将指针赋给整数,未作类型转换 test.c:23: 警告: 赋值时将指针赋给整数,未作类型转换 test.c:24: 警告: 赋值时将指针赋给整数,未作类型转换 test.c:25...: 警告: 赋值时将指针赋给整数,未作类型转换 test.c:29: 警告: 传递参数 1 (属于 ‘display’)时将整数赋给指针,未作类型转换 其中21-25就是 set[0] = h; set...以上就是关于C语言指针赋值的问题,想必都已有了一定的了解,更多关于C语言的内容请继续关注武林技术频道。

1.6K10

C 语言】指针间接赋值 ( 指针作为 函数参数 的意义 | 间接赋值 代码示例 )

文章目录 一、指针作为 函数参数 ( 间接赋值 ) 的意义 二、间接赋值 代码示例 一、指针作为 函数参数 ( 间接赋值 ) 的意义 ---- 调用函数时 , 调用 & 取地址 生成 实参 p , 将...函数参数 , 可以实现 主函数 与 被调用子函数 之间 内存交换 ; 下面是逻辑链 : 指针作函数参数 ( 间接赋值 ) -> 接口封装与设计 -> 模块划分 -> 软件分层 正是因为了 间接赋值 ,...解耦操作 , 实现了 模块化开发 ; 如果没有 指针 作为函数 , 就无法实现 功能分层 , 无法实现 模块化开发 , 就无法实现 接口 封装 与 设计 ; 二、间接赋值 代码示例 ---- 代码示例...(char **p, int *len) { // 堆内存 创建字符串 *p = (char *)malloc(20); // 向堆内存 拷贝字符串数据 strcpy(..., 并为其设置 NULL 初始值 // NULL 就是 0 char *p = NULL; // 在子函数中生成字符串 generate_string(&p, &len

1.1K10

c语言如何利用指针间接赋值

我们都知道,指针是指向一段内存空间的。而这个内存空间也可以存放下一个内存空间的地址,这样一级级的传递下去,就变成了多级指针。在C语言中,多级指针是经常会用到的。 多级指针像一把双刃剑,有利也有弊。...其中,指针一个非常重要的作用:间接赋值。...这个时候,你就可以将这个字符串指针的地址传递给函数。这样,函数的参数就是一个二级指针了,通过这个二级指针,你可以很方便的修改字符串的内容。...; //间接赋值 *p1 = temp; //更改指针所指向的内存空间 printf("T1 %d\n",*p1); //打印出地址 } int Test2(char *p2) {...; printf("T2 %d\n",p2); //打印出地址 ,会发现和实参的地址一样 } //间接赋值 //利用n级指针 改变n-1级指针的值 int main(int argc,char

2K10

C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )

文章目录 一、直接赋值 和 间接赋值 二、在子函数中间接赋值 一、直接赋值 和 间接赋值 ---- 在 函数体 内部 , 声明普通变量 , 直接赋值 : 直接修改该变量 , 称为 直接赋值 ; 简介赋值...: 将该变量的地址 赋值指针 , 通过 指针 修改内存中的变量数据 , 称为 间接赋值 ; 代码示例 : #include #include int main...() { // 定义普通变量 int a = 0; // 声明指针变量 , 并为其设置 NULL 初始值 // NULL 就是 0 char *p = NULL...指针变量 p p = &a; // 通过指针 简介修改 变量 a 的值 // * 符号可以看做 内存空间 的钥匙 , 可通过地址找到内存 *p = 20; //...指针变量 p p = &a; // 通过指针 简介修改 变量 a 的值 // * 符号可以看做 内存空间 的钥匙 , 可通过地址找到内存 *p = 20; //

3K10

C语言指针的初始化和赋值

p1 = p2; //注意啦,p1指向了val2,而没有指向val1 备注:字符串与指针的初始化和赋值 初始化: char *cp = “abcdefg”; //这个初始化过程,是将指针cp指向字符串的首地址...因为,在C语言里面,没有整体处理一个字符串的机制 赋值: cp = “abcdefg”; *cp=”abcdefg” ;//错误!...对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边的表达式类型应该是相同的,如果不是,赋值操作符将试图把右边表达式的值转换为左边的类型。...对指针进行初始化时常用的以下几种方式: 1.采用NULL或空指针常量,如:int *p = NULL;或 char *p = 2-2; 或float *p = 0; 2.取一个对象的地址然后赋给一个指针...,如:char *cp = “abcdefg”; 对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。

2.2K10

C++】函数重载 ③ ( 为函数指针赋值重载函数 )

: 根据 函数指针 类型中的 参数列表类型 , 自动匹配 重载函数 ; 一、函数指针回顾 1、函数指针概念 之前的博客 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式...二、为函数指针赋值重载函数 ---- 1、为函数指针赋值重载函数 对 函数指针 进行赋值时 , 直接将 函数名 赋值给了 函数指针 ; 如 下面的代码中 , 直接将 add 函数赋值给了 函数指针 func_ptr...int (*func_ptr)(int, int) 代码 , 定义的 函数指针 2 个 int 类型的参数 , 1 个 int 类型的返回值 ; 为该函数指针 赋值 add 函数 时 , 就会自动...查找 参数列表是 2 个 int 类型的函数 , 如果没有找到 , 就会编译失败 , 如果找到了 , 为函数指针赋值成功 ; 2、代码示例 - 为函数指针赋值重载函数 完整代码示例 : // 包含 C...{ return a + b + c; } int main() { // 定义 函数指针 , 将函数地址赋值给 函数指针 // 对函数指针进行赋值时 , 会根据函数指针的类型匹配 add

20610

C 语言】指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用的三种场景 )

; ② 实参地址赋值给形参 ; ③ 使用形参指针修改实参值 ; 间接赋值 3 大要素 : 要素 ① : 定义 实际变量 ( 实参 ) , 以及接收 实际变量 地址的 指针参数 ( 形参 ) ; 如果...NULL; 要素 ② : 将 实际变量 ( 实参 ) 地址 , 赋值给 形参 指针 ; // 实际变量 地址 , 赋值给 形参指针 // 该指针变量将来用作 函数参数 p = &a; 要素 ③...: 使用 形参指针 修改 实际变量 ( 实参 ) 的值 ; *p = 20; 二、间接赋值 使用场景 ---- 上述 间接赋值 3 要素 , ① 定义实参和形参 ; ② 实参地址赋值给形参 ;..., 并为其设置 NULL 初始值 // NULL 就是 0 char *p = NULL; // 将 a 的地址赋值指针变量 p p = &a;..., 并为其设置 NULL 初始值 // NULL 就是 0 int *p = NULL; // 将 a 的地址赋值指针变量 p p = &a; // 调用

1.9K20

【编程基础】C语言指针的初始化和赋值

p1 = p2; //注意啦,p1指向了val2,而没有指向val1 备注:字符串与指针的初始化和赋值 初始化: char *cp = "abcdefg"; //这个初始化过程,是将指针cp指向字符串的首地址...因为,在C语言里面,没有整体处理一个字符串的机制 赋值: cp = "abcdefg"; *cp=”abcdefg” ;//错误!...对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边的表达式类型应该是相同的,如果不是,赋值操作符将试图把右边表达式的值转换为左边的类型。...对指针进行初始化时常用的以下几种方式: 1.采用NULL或空指针常量,如:int *p = NULL;或 char *p = 2-2; 或float *p = 0; 2.取一个对象的地址然后赋给一个指针...,如:char *cp = “abcdefg”; 对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。

2.6K80

C 语言】指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

文章目录 一、指针类型变量 与 指针指向的内存块 概念区别 1、指针赋值 2、指针运算 3、内存赋值 4、内存取值 5、内存修改注意事项 一、指针类型变量 与 指针指向的内存块 概念区别 ---- 指针类型变量...&a; 1、指针赋值指针赋值 : 给上述指针变量 p 赋值操作 , 如 p = 0x7F451D12 , 只改变指针变量 p 的值 , 没有改变指针变量 p 原来指向的 内存块 中存储的值 ; char...*p1 = (char *)malloc(100); *p1 = (char *)malloc(100); 上述操作中 , 第二次赋值 , 指针变量改变了 ; 此时 2、指针运算 指针算术运算 : 对上述指针进行算术运算..., p + 1 与 p++ 的计算结果是指针的地址值加上指针类型对应的字节大小值 , 如果是 int 类型的指针 , 则增加 4 字节 ; 3、内存赋值 ** 给指针指向的内存赋值 * 给上述指针变量...; 最容易出错的情况是 , 指针指向 字符串常量 , 强行修改该指针指向的内存 , 会导致出错 ; 下面的代码中 , 就会出现问题 ; char *p = "abc"; *p = "123";

2.9K20

c中给字符数组,字符串指针赋值的方法总结

在写程序的时候,总是搞混,现在总结一下以免以后再犯 char a[10]; 怎么给这个数组赋值呢?谭浩强的书上明确指出,字符数组可以在定义时整体赋值,不能再赋值语句中整体赋值。...1、定义的时候直接用字符串赋值 char a[10]=”hello”; 注意:不能先定义再给它赋值,如char a[10]; a[10]=”hello”;这样是错误的!...2、char a[10]; a=”hello”; 这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱...; C语言把这些语句解释为一个指针与另一个指针之间的(非法的)赋值运算。...因为str1和str2不同的地址,所以表达式str1 == str2的值一定为0。

5.1K30

C 语言】多级指针 ( 在函数中生成 二级指针 | 通过传入的 三级指针 进行间接赋值 )

文章目录 前言 一、在函数中生成 二级指针 ( 通过传入的 三级指针 进行间接赋值 ) 二、完整代码示例 前言 如果要 通过 函数形参 间接赋值 修改 n 级指针, 需要向函数中传入 n + 1...级指针 形参 ; 一、在函数中生成 二级指针 ( 通过传入的 三级指针 进行间接赋值 ) ---- 通过 函数 形参变量 , 间接赋值 返回 生成的 二级指针 函数 ; 如果要生成一个 二级指针 ,...进行赋值 ; 代码示例 : /** * @brief 生成二维指针 * @param num * @return */ int generate_memory(char ***p3, int...// 用于存储 num 个 一维指针 // 每个 一维指针 指向一块内存空间 p = (char **)malloc( sizeof(char*) * num ); if(p...// 用于存储 num 个 一维指针 // 每个 一维指针 指向一块内存空间 p = (char **)malloc( sizeof(char*) * num );

96910

C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )

文章目录 一、使用 数组下标 或 指针 操作字符串 1、使用 数组下标 操作字符串 2、使用 char * 指针 操作字符串 二、代码示例 一、使用 数组下标 或 指针 操作字符串 ---- 1、使用...} 2、使用 char * 指针 操作字符串 使用 指针 访问 字符串 : 将 指针 指向数组 首地址 , 然后可以借助 指针 运算 p + i , 计算从 p 地址开始的第 i 个元素的地址 ; char...> /* * 函数入口 */ int main(int argc, char **args) { // 通过 数组下标 或 指针 操作字符串 // 定义字符数组 , 并为其赋值...5; i ++) { printf("%c\n", str[i]); } // 使用 指针 操作字符串 p = str; for(i = 0;...: a b c a b c 请按任意键继续. . .

77410

拿捏住C字符串,这个烦人程度不亚于指针的小东西

char*类型的实体赋值 /*char* test = (char*)malloc(10); test = "qwr";*/ //依旧不行 const char* test = "asdfg"...test[3] = 'g'; //显然不是的 //那么上面那个赋值语句是什么意思呢?...同样,就算表达式中同时包含了符号整数和无符号整数,还是可能产生意想不到的结果: /*判断一*/ if(strlen(x)>= 5) { } /*判断二*/ if(strlen(x)- 5>=0) {...注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化,即一定要先让它指向某个有效的地址。...,返回负数 //否则,返回0 //可以自己动手写一个,简单的很 ---- strcpy:复制字符串 char* strcpy(char* str1,const char* str2); //其实就是两个指针引用同一个字符串

25810

C++】深度剖析string类的底层结构及其模拟实现

我们暂且先不实现>的重载: 大家想一下,我们在string的使用里学过,string是不是一个接口叫做c_str啊: 它返回的是一个指向当前string对象对应的字符数组的指针,类型为...这里返回的是const char*类型的指针,我们说cout是会自动识别类型,它这里会以字符串的形式去打印,也就是说它不是打印这个指针,而是去解引用打印它指向的字符串,遇到\0,停止,而这里返回的是空指针...还有没有什么问题? ,如果是一个对象自己给自己赋值,是不是旧出问题了啊。 怎么回事? 随机值? 因为如果是自己给自己赋值的话,_str和 s....大家看一下,我们的这个reserve什么问题没有? ,如果我们参数n的值小于_capacity,这里是不是就真的缩容去了,重新开一块小空间,拷贝原来的数据,释放旧空间。...当然这里不能用out<<c_str()去打印,这个我们之前也讲了: 打印c_str返回的const char*的指针,它是遇到’\0’就停止了。所以大家可以理解成c_str就是返回C格式字符串。

18510

C语言中常见指针问题集解答

我想声明一个指针并为它分配一些空间,但却不行。这些代码什么问题?...我一个char*型指针正巧指向一些int型变量,我想跳过它们。为什么如下的代码不行?...void*可以用作一般指针只是因为当它和其它类型相互赋值的时候, 如果需要, 它可以自动转换成其它类型; 但是, 如果试图这样转换所指类型为void*之外的类型void** 指针时, 这个转换不能完成。...C“按引用传递”吗? 答:真的没有。严格地讲,C总是按值传递。你可以自己模拟按引用传递, 定义接受指针的函数,然后在调用时使用 & 操作符。...这个推论表明无论 fp 是函数名和函数的指针r = fp();ANSI C 标准实际上接受后边的解释,这意味着 * 操作符不再需要, 尽管依然允许。 9.

50540
领券