数组与字符串

//初始化数组有两种方法

//1 不指定长度

char buf[] = {'a', 'b', 'c'}; //buf是个指针 是个常量指针 

//2 指定长度

char buf2[10] = {'a', 'b', 'c'};

//3 字符串和字符数组的区别

char buf3[] = {'a', 'b', 'c', '\0'}; //buf是个指针 是个常量指针 3

Memcpy()是内存块拷贝,最后要手动加上\0,字符串拷贝strcpy()自动拷贝\0

memcpy(pOut, pBegin,n);

//对于字符串分配内存有三种方式,可以在堆、栈、全局区(常量区),你要知道你的内存是怎么分配的

char *buf1= "       abcd11111abcd2222abcdqqqqq       ";

char buf2[] = "       abcd11111abcd2222abcdqqqqq       ";

//一级指针的输入模型

//没有内存块,哪有指针啊。。。

int trimSpace_很不ok的做法(char *mybuf)//如果人家传buf1无法修改buf1,它分配在全局区是常量无法修改

{

int count = 0;

int i = 0, j = 0;

 

char *p = mybuf;

j = strlen(p) -1;

 

while (isspace(p[i]) && p[i] != '\0')

{

i++;

}

 

while (isspace(p[j]) && j>0)

{

j--;

}

count = j-i +1;

 

//

printf("count:%d", count);

//void *  __cdecl memcpy(void *, const void *, size_t);

memcpy(mybuf, mybuf+i, count);

mybuf[count] = '\0';

return 0;

//system("pause");

}

 

//一般情况下不要修改输入的内存块的值

int trimSpace_ok(char *mybuf, char *outbuf)

{

int count = 0;

int i = 0, j = 0;

 

char *p = mybuf;

j = strlen(p) -1;

 

while (isspace(p[i]) && p[i] != '\0')

{

i++;

}

 

while (isspace(p[j]) && j>0)

{

j--;

}

count = j-i +1;

 

//

printf("count:%d", count);

//void *  __cdecl memcpy(void *, const void *, size_t);

memcpy(outbuf, mybuf+i, count);

outbuf[count] = '\0';

return 0;

//system("pause");

}

 

通过字符串常量初始化字符数组会自动添加\0

而通过字符数组不会

char p[4] = "abc";  //strlen(p)3

char p[8] = "abc\0 abc ";  //strlen(p)3

char p[3] ={'a','b','c'};  //strlen(p)3

char p[6] ={'a','b','c', '\0','b','c',};  //strlen(p)为3

 

/*1. 

char buf[3]={'s','s','d'}  将\0冲掉

printf("%d\n",strlen(buf)); 不确定多少,因为会一直找\0

printf("%d\n",sizeof(buf)); 等于3

*/

/* 2.当:

char buf[4]={'s','s','d'};

printf("%d\n",strlen(buf)); 等于3

printf("%d\n",sizeof(buf)); 等于4

*/

//如何通过指针获取数组大小

double buf[6]={3.0,3.0,3.0,3.0,3.0};

double*p= buf;

//printf("%d\n",strlen(*p)); //一个char型不能求字符串长度

printf("%d\n",sizeof(*p)); //可求数据类型大小

printf("%f\n",strlen(p));//错误值,如果是字符数组,可以求得数组长度

printf("%d\n",sizeof(p));//sizeof总是求得指针本身

printf("%f\n",strlen(buf));//错误值,不能求字符串长度

printf("%d\n",sizeof(buf));

注意:语法级别的越界

char p[3]=”abcde”; //编译器不报错,运行时错误(并不会崩溃),原因是越界了导致结尾没有了\0,可能等在内存某处找到\0结果错误

printf("%d\n",strlen(p)); //不确定

printf("%d\n",sizeof(p)); //6

 

const int a = 10;

int const b = 11;//两者相同

//可看离const修饰符最近的变量/修饰符类型

const char* c = NULL;//const 在*号左边,表示指向的内容不可写

char* const d = NULL;//const 在*号右边,表示指向不可变

const char* const e = NULL;

指针做函数参数时,传入参数一般加上const,防止被改动

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章