`

C字符串指针操作

阅读更多
下面是我自己的见解,不具有权威性,如果哪位大神发现错误还请指出以共同进步。

int main(int argc,char*argv[]){
    char *temp;
    temp="King";
    printf("temp address is %d\n",temp);//此处temp的内存地址应该指向栈空间的地址。此时未给temp分配堆内存,如果调用srncpy(temp,"abc",4);则会出错,我估计是因为strncpy函数是给分配堆空间的变量赋值的函数,但我们尚未给temp使用malloc或calloc函数分配内存空间。
    printf("temp is %s\n",temp);
   
    char *tempStr="A Hi Android";
    printf("tempStr address is %d\n",tempStr);
   
    temp=(char*)malloc(sizeof(char)*0);
    printf("temp address is %d\n",temp);
    strncpy(temp,"Hi",strlen("Hi Android")+1);//在上面我们给temp分配了堆内存空间,虽然我们分配了0个字节的空间,但此时temp的地址值已经指向堆空间,所以我们调用strncpy函数不会出错,并且此时若输出temp的值,就是我们调用函数strncpy所赋的值“Hi”。

    free(temp);
    printf("after free temp is %s\n",temp);//此处输出的地址值同未调用free函数之前的地址相同,free(temp)操作的结果是:指针temp指向的地址没变,但地址处的数据此时已经无定义了。即,指针还在,但是数据已经被释放了。
    strncpy(temp,"abc",4);//此处仍会成功执行,因为free未使得temp的地址指针改变,temp地址的指针值依然指向堆空间,但此时的空间值可以再次被申请,所以最好在free一个变量的空间后,将变量的指针赋值为NULL。否则如果后面有类似于这样的语句char* tempStr;tempStr=(char*)malloc(sizeof(char)*16);strncpy(tempStr,"zhao",5);printf("tempStr is %s temp is %s",tempStr,temp );temp的值就变成了"zhao"不再是上面的“abc”。
}
注解:我原以为strncpy函数的第一个变量的地址值不是NULL就可以使用,但当我改变了temp的地值之后仍然不能使用,我就想可能是因为strncpy操作的第一个变量的地址值必须指向堆空间才可以,不知道对不对。
分享到:
评论

相关推荐

    C语言 字符串指针详解及示例代码

    C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在《C语言字符数组和字符串》中已经进行了详细讲解,这里不妨再来演示一下: #include int main(){ char str[] = ...

    C-字符串处理算法与实现

    自定义函数实现 C-字符串基本操作 交换 C-字符串 C-字符串数组排序

    判断2个字符串是否含有相同的字符

    这是针对不知道字符串大小并且不占用额外空间的做法,需要非常繁琐的操作,要加很多标记,越界判断也会有些麻烦(结合优势么,用字符串常量而不是栈空间中的字符数组,有'\0'——就好判断了!) (关于空间的占用,...

    字符串合并~检测出其中的数字输出

    有用户输入的两个字符串a和b,两字符串中有字母和数字,请完成如下两个操作, 1. 编写一个函数strConCat,将字符串a和字符串b连结成字符串c,并返回给主函数; 2. 对连接后的字符串c,将其中连续的数字作为一个整数...

    基于C语言的纸牌操作(涉及字符串操作,指针,二维数组知识)

    生成一副扑克牌,这副扑克牌具有52张,4种不同的花色,可以对这副新的扑克牌进行洗牌、发牌的操作

    C_结构与指针互相操作

    C_结构与指针互相操作,结构与byte数组,所有字符串详解

    C字符串函数对应的C++ string操作详解

    string是STL里的标准类,习惯了使用指针操作C的char *字符串,刚开始并不是很适应,主要原因是对string.h里的函数没有找到合适的C++替换方法,因此,对常用的sring.h里的函数替换说明如下: strcpy: str.substr() ...

    Python格式化输出字符串方法小结【%与format】

    字符串输入数据格式类型(%格式操作符号) %% 百分号标记#就是输出一个% %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) %x 无符号整数(十六进制) ...

    C++ 字符串的反转五种方法实例

    定义一个新的与传递过来字符串长度 相等的字符数组,然后进行字符串拷贝,把str字符按从左到右放置到字符数组中,然后采用循环来对字符数组中字符反转*//*第一种,采用以上思路解法,传递为const类型C风格字符指针,返回...

    深入解析C++和JAVA的字符串

    所有的字符串类都起源于C语言的字符串,而C语言字符串则是字符的数组。C语言中是没有字符串的,只有字符数组。 谈一下C++的字符串:C++提供两种字符串的表示...操作字符串的时候只要操作指针就可以了。如 :  const ch

    VC++对字符串处理

    精心整理,大家在使用VC++处理字符串的时候肯定遇到unicode 宽字符的问题: 比如:“不能将参数 1 从“const char [5]”转换为“LPCTSTR””之类的问题。 在此文档中告诉你怎么转换。 cstring 转换 char cstring ...

    字符串C++整理

    平时对字符串的操作的是很多的,了解下常用的字符串函数会使 c 编程变得很快捷!这里适当整理一下,方便以后参考。使用时,会用到大量指针的操作,注意加头文件:  #include  一、str 系列  1.strtok  ...

    fearhacker用c写的linux系统下的INI配置文件管理程序(读操作)

    在LINUX系统下,并没有合适的INI文件读取函数。fearhacker因为工作需要写...该程序利用C语言编码,主要采用到的技术知识有,二维数组,二维数组指针,结构体,字符串指针,强制类型转换,动态内存的开辟、使用、销毁。

    C指针 基本概念 核心技术及最佳实践

    本书从介绍内存和实时内存概念开始,然后讲述了指针变量的概念和它最重要的操作(引用和解引用)、指针运算和一维数组、使用指针处理字符串、指针访问多维数组的用法、使用指针访问结构体与成员字段、函数指针概念的...

    吕鑫:最博大精深的C语言视频教程 第14天 【第3堂课】字符串操作函数的标准答案(面试题)

    1、对照系统函数的源码,字符串操作函数的标准答案; 2、介绍万能指针变量(void*类型)的使用规则; 3、介绍C语言中的两大族函数:mem族函数与str族函。

    C 和指针.pdf

     全书共18章,覆盖了数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几乎所有重要的C编程话题。书中给出了很多编程技巧和提示,每章后面有针对性很强的练习,附录部分则给出了部分练习的解答...

    一些VC.NET字符串操作演示实例

    字符串的操作演示实例源码,比如对字符串进行连接,字符串比较,从字符串中存取字符,如何计算一个字符串的大小,如何使用VC快速格式化一个字符串,如何将Cstring类型的字符串转换成int型和float型,如何让字符串...

    C和指针思维导图xmind

    使用思维导图xmind工具整理的C和指针知识点,其中包括基本概念、数据、操作符、指针、函数、数组、字符串、结构体和联合、动态内存分配、预处理器、输入输出函数、标准库函数、经典抽象数据类型等知识点!

    指针是C语言可以用来直接访问内存地址

    1. 数组和字符串 2. 函数参数传递 3. 动态内存分配和释放 4. 结构体和链表操作 在C语言中,我们可以使用malloc、calloc和realloc等函数来动态分配内存空间。这些函数返回一个指向分配内存空间起始位置的指针,我们...

    C指针基本概念核心技术及最佳实践 完整书签版

    本书从介绍内存和实时内存概念开始,然后讲述了指针变量的概念和它重要的操作(引用和解引用)、指针运算和一维数组、使用指针处理字符串、指针访问多维数组的用法、使用指针访问结构体与成员字段、函数指针概念的...

Global site tag (gtag.js) - Google Analytics