字符指针常见问题

我们已经知道, 字符串常量是由双引号括起来的字符序列, 例如:
          "a string"
就是一个字符串常量, 该字符串中因为字符a后面还有一个空格字符, 所以它由8 个字符序列组成。在程序中如出现字符串常量C 编译程序就给字符串常量按排一存贮区域, 这个区域是静态的, 在整个程序运行的过程中始终占用, 平时所讲的字符串常量的长度是指该字符串的字符个数, 但在按排存贮区域时, C 编译程序还自动给该字符串序列的末尾加上一个空字符'''', 用来标志字符串的结束, 因此一个字符串常量所占的存贮区域的字节数总比它的字符个数多一个字节。
    Turbo C中操作一个字符串常量的方法有:
    (1). 把字符串常量存放在一个字符数组之中, 例如:
          char s[]="a string";
数组s共有9个元素所组成, 其中s[8]中的内容是''''。实际上, 在字符数组定义的过程中, 编译程序直接把字符串复写到数组中, 即对数组s初始化。
    (2). 用字符指针指向字符串, 然后通过字符指针来访问字符串存贮区域。当字符串常量在表达式中出现时, 根据数组的类型转换规则, 它被转换成字符指针。因此, 若我们定义了一字符指针cp:
     char *cp;
于是可用:
     cp="a string";
使cp指向字符串常量中的第0号字符a, 如图7.所示。
            cp
        ┏━━━┓     ┏━┳━┳━┳━┳━┳━┳━┳━┳━┓
        ┃    ─╂─→ ┃a ┃  ┃s ┃t ┃r ┃i ┃n ┃g ┃┃
        ┗━━━┛     ┗━┻━┻━┻━┻━┻━┻━┻━┻━┛
                              图7.
以后我们可通过cp来访问这一存贮区域, 如*cp或cp[0]就是字符a,  而cp[i]或 *(cp+i)就相当于字符串的第i号字符, 但企图通过指针来修改字符串常量的行为是没有意义的。

lieti
【程序96】
题目:计算字符串中子串出现的次数
1.程序分析:
2.程序源代码:
#include "string.h"
#include "stdio.h"
main()
{ char str1[20],str2[20],*p1,*p2;
int sum=0;
printf("please input two stringsn");
scanf("%s%s",str1,str2);
p1=str1;p2=str2;
while(*p1!='''')
{
if(*p1==*p2)
{while(*p1==*p2&&*p2!='''')
{p1++;
p2++;}
}
else
p1++;
if(*p2=='''')
sum++;
p2=str2;
}
printf("%d",sum);
getch();}

时间: 2024-09-30 06:47:30

字符指针常见问题的相关文章

c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求

问题描述 c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求 #include #include int main() { char*s; scanf("%s",s); //printf("%sn",s); //int n = strlen(s); //printf("%dn",n); char ret[56]; return 0; } 解决方案 s只是指针变量,没有分配内存 char*s; s = mall

C结构中使用字符指针

下面的例子定义了两个结构,由于成员中存在字符串,所以结构一使用了字符数组,而结构二使用字符指针. #include <stdio.h> #define LEN 20 struct info { char first[LEN]; char last[LEN]; int age; }; struct pinfo { char * first; char * last; int age; }; int main() { struct info one = {"Opw", &quo

API入门系列之三 -那迷惑人的Windows字符和字符指针类型

大家好,通过前面两篇打头文章,我也看了留言,感谢那些给我提意见的人和指出错误之处的人.再次谢谢你们的支持.另外,Windows SDK编程交流群已经建立了,欢迎各位志同道合者加入进行交流(群号:81543028) 本打算通过前面两篇文章的讲解,后来的系列就可以通过使用一些简单的,常用的API写一些示例程序的讲解进行,但是发现还有一个不得不先讲一讲的要点,Windows下和字符串操作有关的数据类型.我看留言中也有几位朋友提到了,那我就在这篇中讲它吧.不会很枯燥的,各位慢慢看下去就是了. 下面我罗列

C/C++中字符指针数组及指向指针的指针的含义

就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针. 先看下面的代码,注意看代码中的注解: #include <iostream>#include <string>using namespace std; void print_char(char* array[],int len);//函数原形声明void main(void){//-----------------------------段1----------

c语言-求问一个C语言字符指针的问题

问题描述 求问一个C语言字符指针的问题 #include void Initialize (char * a, char * b) { a[0] = 'T'; a[1] = 'h'; a[2] = 'i'; a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's'; a[7] = ' '; a[8] = 'A'; a[9] = ''; b = a; b[8] = 'B'; } #define ARRAY_SIZE 10 char a[ARRAY_SIZE];

字符数组与字符指针的问题

问题描述 字符数组与字符指针的问题 include int main(void) { char*str="hello"; return 0; } ///////////////////////////////我的疑惑是:为什么上面可以,下面的不可以? include int main(void) { char*str; scanf("%s",str); return 0; } 解决方案 唔..比如这样一段代码 通过调试得知指针变量s地址为0xbffff344:str

malloc-C语言中的字符指针操作问题,如何释放字符指针空间?

问题描述 C语言中的字符指针操作问题,如何释放字符指针空间? 源码如下: #include #include #include void main() { char s1; char *s2 = "bbb"; char *s3 = "ccc"; s1 = (char)malloc(sizeof(s2)); strcpy(s1, s2); strcat(s1, s3); //free(s2); //free(s3); printf("%s ", s

c语言-C语言关于字符指针变量和字符数组的说法

问题描述 C语言关于字符指针变量和字符数组的说法 下列关于字符指针变量和字符数组的说法错误的是 A)字符指针变量的值可以变化 B)字符数组的值可以变化 C)字符指针变量代表了一个地址 D)字符数组代表了一个地址 ====答案选B,求解释? 解决方案 选择B.字符数组相当于指针常量. 解决方案二: 数组定义时系统给开辟内存单元,数组名相当于数组的开始地址是不能变化的 解决方案三: C语言字符指针和字符数组C语言中,为什么字符串可以赋值给字符指针变量字符数组和字符指针

c++-C++ 读取输入流到字符指针

问题描述 C++ 读取输入流到字符指针 int main(){ char *c; cin>>c; cout<<c; return 0;}程序会崩溃,但是把char *c;改成 char *c = new char[1];就可以运行,求大神给解释一下. 解决方案 char* c;后c是一个未初始化的指针,其值不确定,后面cin>>c是从键盘读取内容到这个地址处,但是你怎么知道这个地址一定不会被别的什么代码使用呢?于是就错了.第二个是用new分配了专有地址空间的,写数据进去