芯片IC单片机解密百科

十年专注单片机解密

芯片破解使用的字符串剪切

我们经常需要去除字符串里的开始符 者结束符号。

本兹介绍的程序芯片破解使用的字符串剪切 用千去除字符串的结尾部分的回车和换行字符 CR/LF

 

!include <s t di o . h> #include <s t r i ng , h>

 

char* str_trim !char *s)

I

char c;

size_t str_len;

 

// work as long as r or n is at the end of string

// stop if some other character there or its an empty string'

// (at start or dueto ouroperation)

for (str_len=strlen (s); str_len>O && (c=s [s t r_l e n- 1} ) ; str_len--)

if     (c=    ' r  '    11     c  =='   n ' )

s[str_len-1}=0;

else

};


break;


returns;

};

 

int main ()

// test

 

// strdup() is used to copy text string into data segme nt ,

// because it will crash on Linux ot her wi s e ,

// where text strings are allocated in constant data segme nt ,

// and not modifiable.

 

printf ( " [ %s ] n " , str_trim (s t r dup ( " " ) ) ) ;

printf   ( " [%s] n" ,   str_trim  (s  rt           dup ( " n" ) ) ) ;

printf    ( "  [%s] n"  ,    str_trim  (strdup("r")));

printf   ( " [%s ] n " ,   str_trim  (s t r dup ( " n r " ) ) ) ;

printf   ( "  [%s  ] n" ,   str_trim   (s  t  r dup ( " r n" ) ) ) ;

printf ( " [%s] n" , str_trim (s rt dup ( " t es t l r n" ) ) ) ;

printf  ( "  [%s] n" ,  str_trim  (strdup ( "  t es  t  2 n  r " )  )  ) ; printf ( " [%s ] n " , str_trim (s t r du p ( " t es t 3 n r n r " ) ) ) ; printf ( " [%s ] n" , str_trim (s t r dup ( " t es t 4 n" ) ) ) ;

printf  ( " [%s] n" ,  str_trim  (s  t r d up ( " t es  t S r " ) ) ) ; printf ( " [%s] n" , str_trim (strdup ( " t es t 6 r r r " ) ) ) ;

};

 

输入参数总能正常返回并退出。当你需要对串进行批蜇处理时会非常方便 就像这里的 ma in()函数样。

在该程序循环体 fo r() 语句里有两个判断条件表达式 个条件表达式是 str_ le n> O ( 字符串的长度千零 另外 c=s [str _ le n- 1]   (  思是取出的值不 0不是终止符 。循环判断语句 " str _ le n > O  &&  (c =s [ str _ le n- 1]) " 实际上利用了所谓“逻辑短路”的 执行特性 因此可以这样书写第个判断表达式(可以参考 Yur l 3 :p. l.3 .8 ) CIC丑编译器自左至右的逐一检测判断条件。因为逻辑操作符是 " & & " (与),所以


一旦个条件表达式的值为假 计算机就不用再判断执行)个条件判断表达式。实际上 第二个条件表达式是种只能在相应的条件下才可以运行的语句。笔者综合利用了第个条件表达式、逻辑操作"&&"的逻辑含义以及逻辑短路 的特性 为第个条件判断表达式限定了执行条件。


cache
Processed in 0.004093 Second.