首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于字符处理的有关问题

2013-11-02 
关于字符处理的问题Quote: 引用:从q p到 *q \0,相当于中间字符串有被\0截断。Quote: 引用:char d

关于字符处理的问题

关于字符处理的有关问题
Quote: 引用:

从q = p;到 *q = '\0';,相当于中间字符串有被'\0'截断。

Quote: 引用:


char dirPath[MAX_PATH] = "";

char *p, *q;
HANDLE hFile = INVALID_HANDLE_VALUE;

 GetModuleFileName(NULL, dirPath, MAX_PATH); //获得这个exe执行文件的路径
// printf("%s\n",dirPath);
     p = dirPath;
     while((p = strpbrk(p, "\")) != NULL) //在字符串p中找到第一个\ 删除这个\前的字符串
     {
         q = p;
         p++;//去掉路径的第一个斜杠 ,指针向后移动一个字符的长度就可以删了

     }
     *q = '\0';
     strcat(dirPath, ">");
     printf("%s", dirPath);

比如原来dirPath='D:\OperatingSP1\Debug>Operating.exe'
最后输出的为什么是D:\OperatingSP1\Debug>  ???
 

[解决办法]
*q = '\0' 
这是把\ 也就是字符'\\' 替换为字符串结束符'\0';
那么对于字符串,后面的一切,都被无无视了。
因为'\0'是字符串结束符,是字符串的结束标志。
字符串到此结束。
无论是C的库函数,还是字符串常量(字面值)本身;
'\0'都代表字符串到此为止,结束了。
所以对于,C字符串,'\0'有独特的含义。就是结束字符串。

*q 这种用法,代表指针的值,所表示的地址中的数据,即指针指向的内容。
所以这里的*,称为指针的解引用运算符。

指针的值是个地址。

这个地址里的数据的类型,就是指针的类型。
这个地址里的数据,就是指针所指的数据。

*q 就是指针q 所指的数据,就是“D:\OperatingSP1\Debug\Operating.exe”
Operating.exe前面的\
替换成\0  字符串,就成了“D:\OperatingSP1\Debug”
注意  \0是一个字符,即 char(0)值为 0的字符。                               
实际内容是“D:\OperatingSP1\Debug\0Operating.exe”
Operating.exe在\0后,不是字符串的一部分了。
所以字符串的值是“D:\OperatingSP1\Debug”

strcat(dirPath, ">");后

字符串,就成了“D:\OperatingSP1\Debug>”
实际内容是“D:\OperatingSP1\Debug>\0perating.exe”
perating.exe在\0后,不是字符串的一部分了。
字符串通常用他的第一个字符的地址表示,并且以'\0'结束。

如果他的某个位置被替换为'\0';
那么,此后的数据,对于字符串,就视为不存在了,所以Operating.exe这部分就被截断了。

如果一个字符串不是常量,那么可以把他的任意位置数据替换为'\0',
后面的数据就不再是字符串的一部分了。




热点排行
Bad Request.