C言語におけるシングルクォート「 」とダブルクォーテーション「 」の違い、ダブルクォーテーション付きマクロを文字パラメータとして使用する場合の注意点

C言語では文字列を定義する際によく使います。

char *str = "test";

ここでの "test" は 定数文字列配列であり、これを str に代入すると、実際には 文字列配列"test" の最初のアドレスがstrに代入されます。したがって、二重引用符で囲まれた文字列を見た場合、それを直接アドレスとして扱うことができます。

そして、私たちが使用するキャラクターを定義するとき、

char c = 't'

これは、't' をcに代入することを意味します。cに格納される値は、アドレスではなく't'の特定の値です。

これは C 言語を学習する際の常識のはずですが、マクロ定義に引用符を適用すると、いくつかの問題が発生することがあります。

#include <stdio.h>
#include <string.h>

#define MAX_PATH 260
#define TEST "\\"

int main(int argc, char *argv[]) {

	char filename[MAX_PATH]="C:\\etc\\mte";
	char *start = strrchr(filename, *"\\");
	char *start = strrchr(filename, *TEST);
	printf("start:%s \n", start);

	system("pause");
	return 0;
}

マクロ定義を使用する場合、一重引用符と二重引用符の違いを無視することがあります。たとえば、上記のコードではTEST\として定義し、strrchr関数のパラメーターとして定義しています。ここで多くの人はchar *start = strrchr( filename, TEST) ; TESTの前に * を追加するのを忘れたため、エラーが発生しました。strrstr関数の 2 番目のパラメーターはcharですが、TEST は実際にはアドレスであるため、エラーが報告されます。ここでの*TESTは*"\\"に相当します。これは、アドレス"\\" \*"\\"='\\'の下のコンテンツを取得することを意味します。

おすすめ

転載: blog.csdn.net/Learner027/article/details/90294206