C言語における文字列の大きな穴

4325 ワード

【ピット1】
[Error] ISO C++ forbids comparison between pointer and integer [-fpermiss

エラーコード:
if(a[i]=="G"&&b[i]!="C")
    return false; 

修正後のコード:
if(a[i]=='G'&&b[i]!='C')
    return false;

2つの異なるタイプのデータは比較できないが、a[i]は1文字を表し、「C」は1文字列の宛先を表すので、「C」を「C」に変更すべきである.
【ピット2】char[]の付与エラーについて
 error: invalid array assignment

配列をstrcpyでコピーする必要があり、文字列に直接値を割り当てることはできません.
【ピット3】2つの文字列を比較すると、warning:comparison with string literal results in unspecified behaviourが表示されます.
例を挙げます.
char* pstr = "enable";  
if (pstr == "enable")  PerformTask();  

しかし、プログラムが実行されると、PerformTask()は常に呼び出されていないことがわかります.
解决方法:1.Cでは、この文字列の比較方式は大きな詐欺性と殺傷力を持っており、プログラムのコンパイルも通過できるが、実際に比較された条件は常に成立しないため、条件が成立した後に実行された操作はいつも完成できない.
2 . このようなエラーがC言語で発生しないように、自分でテストプログラムをコンパイルするときはWallオプションを開くべきです.そうすると、コンパイルするときにエラーメッセージが表示されます.
warning: comparison with string literal results in unspecified behavior [-Waddress]

ヒントは、正しい文字列処理を使用する必要があります.
3 . サンプルコード:
#include   
#include   

int main() {  
    printf("
========================================================================
"
); char str1[] = "1/6"; char* delim1 = "/"; char* seq_no = NULL; char* total_no = NULL; seq_no = strtok(str1, delim1); printf("seq_no is: %s
"
, seq_no); total_no = strtok(NULL, delim1); printf("total_no is: %s
"
, total_no); // if (seq_no == "1") { if (!strcmp(seq_no, "1")) { printf("This is seq number %s
"
, seq_no); } return 0; }

実行結果:
    u1204@u1204-zhw:~/wrk/tmp/cpp_src/c_exer$ ./test_strtok   

    ========================================================================  
    seq_no is: 1  
    total_no is: 6  
    This is seq number 1  
    u1204@u1204-zhw:~/wrk/tmp/cpp_src/c_exer$  

問題が解決する.