今天写一段非常简单的程序,字符串查找匹配字符替换。源码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char *sSrc = "[%22]";
int sSrcLen = strlen(sSrc);
char *sMatchStr = "%22";
char *sReplaceStr = "/"";
int sLen;
char *sNewStr = (char *)malloc(16);
char *findPos = strstr(sSrc,sMatchStr);
while(findPos)
{
memcpy(sNewStr,"",16);
sLen = findPos-sSrc;
strncpy(sNewStr,sSrc,sLen);
strcat(sNewStr,sReplaceStr);
strcat(sNewStr,findPos+strlen(sMatchStr));
strcpy(sSrc,sNewStr);
findPos = strstr(sSrc,sMatchStr);
}
free(sNewStr);
}
这段代码编译可以通过,但是运行会产生段错误。gdb调试跟踪发现strcpy(sSrc,sNewStr)产生段错误。这是由于sSrc初始化时指向了指针常量地址。
strncpy与memcpy会产生同样的错误。看来使用指针时要养成初始化分配内存的良好习惯啊。