我有以下文字包含控制字符,请看图像,当我从Notepad ++复制到这个问题时,这些控制字符不显示
有没有办法在本文中只获取“HIEUDT”字符串?我不知道带控制字符的子串函数
在另一种语言中,也许我会使用\a
字符和0x04
使用正则表达式开头,但在C中我没有使用它的经验
答案 0 :(得分:3)
您可以使用标准字符串函数:
char *start = memchr(data, '\x07', datalen);
start++;
char *end = memchr(start, '\x14', datalen-(start-data));
int len = end - start;
char str[len+1];
memcpy(str, data, len);
str[len] = '\0';
您当然必须检查memchr
每次都不会返回NULL
。
答案 1 :(得分:1)
int i=0, j=0;
while ((data[i] != 0x07) && (i<dataLen))
i++;
char *subString = malloc((dataLen-i)+1);
if (subString != NULL)
{
while ((data[i] != 0x14) && (i<dataLen))
subString[j++] = data[i++];
if (i<dataLen)
{
subString[j] = '\0';
printf("%s", subString);
}
else
{
printf("Delimiters not found");
}
free (subString);
}
答案 2 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
int extractStr(char *out,const char *in, char Delim1, char Delim2){
int n=0;
while(*in){
if(*in==Delim1){ // first delimiter found?
in++;
while(in[n] ){
if(in[n]==Delim2){ // second delimiter found?
if(out) out[n]=0; // null terminate out if provided
return n;
}else{
if(out)
out[n]= in[n]; // copy back to out if provided
}
n++;
}
in+=n;
}
in++;
}
return 0;
}
int main(){
char *buff;
int n;
char str[]="jksdqsqd sqjhd\bresult\x04qsjhgsdsqs";
n=extractStr(NULL,str,'\b',0x04);
if(n){
buff=malloc(n);
n=extractStr(buff,str,'\b',0x04);
printf("'%s'\n",buff);
free(buff);
}else
printf("string not found\n");
return 0;
}