Native/C++
[String]addslashes 함수의 구현
aucd29
2013. 10. 2. 18:56
[String]addslashes 함수의 구현
addslashes : 따옴표('),큰다옴표("),백슬래쉬(\),NULL 바이트 앞에 슬래쉬를 붙여 반환한다.
gcc ver: 2.95.4
os: linux
ref: php-4.3.0
compile: gcc -o test test.c
[code]
#include <stdio.h>
#include <malloc.h>
char *AddSlashes(char *,int,int *);
int main(int argc,char **argv){
char *tstStrNew,tstStr[]="This is test string'\\\".";
int tstStrLen=0,tstStrNewLen=0;
tstStrLen=strlen(tstStr);
tstStrNew=AddSlashes(tstStr,tstStrLen,&tstStrNewLen);
printf("Before: %s %d\n",tstChr,tstStrLen);
printf("After: %s %d\n",tstStrNew,tstStrNewLen);
free(tstStrNew);
return 0;
}
char *AddSlashes(char *lpszStr,int iLen,int *lpiNewLen){
char *lpszNewStr;
char *lpszSource,*lpszTarget;
char *lpszEnd;
int iLocalNewLen;
if(!lpiNewLen){
lpiNewLen=&iLocalNewLen;
}
if(!lpszStr){
*lpiNewLen=0;
return lpszStr;
}
lpszNewStr=(char *)malloc((iLen?iLen:(iLen=strlen(lpszStr)))*sizeof(char)+1);
lpszSource=lpszStr;
lpszEnd=lpszSource+iLen;
lpszTarget=lpszNewStr;
while(lpszSource<lpszEnd){
switch(*lpszSource){
case '\0':
*lpszTarget++ ='\\';
*lpszTarget++ ='0';
break;
case '\'':
case '\"':
case '\\':
*lpszTarget++ ='\\';
/* break is missing *intentionally* */
default:
*lpszTarget++ =*lpszSource;
break;
}
lpszSource++;
}
*lpszTarget=0;
*lpiNewLen=lpszTarget-lpszNewStr;
lpszNewStr=(char *)realloc(lpszNewStr,*lpiNewLen+1);
return lpszNewStr;
}
[/code]
addslashes : 따옴표('),큰다옴표("),백슬래쉬(\),NULL 바이트 앞에 슬래쉬를 붙여 반환한다.
gcc ver: 2.95.4
os: linux
ref: php-4.3.0
compile: gcc -o test test.c
[code]
#include <stdio.h>
#include <malloc.h>
char *AddSlashes(char *,int,int *);
int main(int argc,char **argv){
char *tstStrNew,tstStr[]="This is test string'\\\".";
int tstStrLen=0,tstStrNewLen=0;
tstStrLen=strlen(tstStr);
tstStrNew=AddSlashes(tstStr,tstStrLen,&tstStrNewLen);
printf("Before: %s %d\n",tstChr,tstStrLen);
printf("After: %s %d\n",tstStrNew,tstStrNewLen);
free(tstStrNew);
return 0;
}
char *AddSlashes(char *lpszStr,int iLen,int *lpiNewLen){
char *lpszNewStr;
char *lpszSource,*lpszTarget;
char *lpszEnd;
int iLocalNewLen;
if(!lpiNewLen){
lpiNewLen=&iLocalNewLen;
}
if(!lpszStr){
*lpiNewLen=0;
return lpszStr;
}
lpszNewStr=(char *)malloc((iLen?iLen:(iLen=strlen(lpszStr)))*sizeof(char)+1);
lpszSource=lpszStr;
lpszEnd=lpszSource+iLen;
lpszTarget=lpszNewStr;
while(lpszSource<lpszEnd){
switch(*lpszSource){
case '\0':
*lpszTarget++ ='\\';
*lpszTarget++ ='0';
break;
case '\'':
case '\"':
case '\\':
*lpszTarget++ ='\\';
/* break is missing *intentionally* */
default:
*lpszTarget++ =*lpszSource;
break;
}
lpszSource++;
}
*lpszTarget=0;
*lpiNewLen=lpszTarget-lpszNewStr;
lpszNewStr=(char *)realloc(lpszNewStr,*lpiNewLen+1);
return lpszNewStr;
}
[/code]