Linux

    xiaoxiao2021-03-25  57

    段错误的产生原因:     a.给只读区域写入值  eg:c[0] = 'w';     b.读写低地址的值 eg:printf("%s",*pa); [%s应该是读取地址] 字符串结束标志是字符串的第一个斜杠零“/0” 内存的存储单元分为:     1.栈        高位     2.堆        数组,动态分配     3.BSS        全局变量 //只读区     4.dodata    指针     5.代码        低位 *(pd+1)        地址偏移,即指针加上其指的类型的空间大小 函数名和数组名不占空间,只是一个标签 %p    表示打印元素的地址 指针的一般形式:     [字符类型]* [指针名]        注意:字符类型要与所赋值地址的类型相同 数组名作为数组首地址不能作为左值; x86内核中     size_t        unsigned int     ssize_t        int     time_t        long     clock_t        long 动态分配空间后一定要释放空间即malloc和free一定要成对出现。 在string.h头文件中有一个可以对malloc开辟的空间进行初始化的函数memset:void    *memset(void *, int, size_t); eg:memset(要初始化指针名,初始化数据,初始化的空间大小) strlen()和sizeof()函数之间的区别:     strlen()用来输出指针所求的字符串的字符个数,与分配空间无关;是函数;不包含字符串尾部的'/0';     sizeof()用来输出测试的对象所占(分配)的空间(字节)大小;是操作符,包含字符串尾部的'/0'; float*不存在; void与void*的区别:     void只能修饰函数,即表示函数没有返回值;     void*隐式,可接受int*和char*,并可进行强转; 计算机的大端和小端(用char强转可查看其大小端)     从高位开始进行存储栈数据为大端存储(低位数据对应高地址,高位数据对应低地址);     从低位开始进行存储栈数据为小端存储(低位数据对应低地址,高位数据对应高地址) 作业:     1.看输出并分析        段错误,指针指错位置 int*是8个字节,而int是4个字节,强转会造成数据溢出导致丢失。     2.判断回文     3.判断字符串的大小写,数字个数   

    翻译软件的字典解压后存放的文件目录:/usr/share/stardict/dic

    //回文数判断 #include<stdio.h> #include<string.h> int Rechar(char* c) { int i = 1; char* pc = c; char* pa = c; if(*c != '\0'){ while (*(pc+1) != '\0') pc++; } else return 0; while((2*i)<strlen(c)){ if(*pc != *pa) return 0; else { i++; pc--; pa++; } } return 1; } int main(void) { char c[20]="hlkho020ohklh"; printf("%s\n",c); if(Rechar(c)) { printf("This is Rechar!\n"); } else printf("NOT Rechar! \n"); return 0; } //计算字符串的字符种类各是多少 #include<stdio.h> int i,j,k,s; void Countchar (char* c) { char* pc = c; while(*pc != '\0'){ if (*pc<='z' && *pc>='a') i++; else {if(*pc>='A' && *pc<='Z') j++; else{ if (((*pc)<':')&&((*pc)>'/')) k++; else s++; } } pc++; } } int main(void) { char c[30]= "187614918461qkhdskauf"; i=0;j=0;k=0;s=0; printf("c:%s\n",c); Countchar(c); printf("ABC:%d\n",j); printf("abc:%d\n",i); printf("123:%d\n",k); printf("$#@:%d\n",s); return 0; } #include<stdio.h> int main() { int a[4] = {1,2,3,4}; printf("%d\t%d\n",sizeof(int*),sizeof(int)); printf("%d\n",a); printf("%d\n",((int)a+0)); printf("%d\n",((int)a+1)); int* pa = (int*)((int)a+1); printf("%d\n",*pa); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-36048.html

    最新回复(0)