こんばんは、2つの関数があり、それぞれがcharへのポインターを引数として受け入れます。
char pointer[255];
func1(char* pointer)
{
...
memcpy(pointer,some_char,strlen(something));
return;
}
func2(char* pointer)
{
...
if (pointer==someother_char) exit(0); //FAILs
//also I have
if(pointer==someother_pointer2char); // FAILs
}
今私は試しましたstrstr、strcmpなど...動作しません。 memcmpを試したかったのですが、静的lenがありません。 char * to charとchar * to char *を比較する必要があるので、2つのソリューションが必要ですか?
では、これらのポインタ(実際には指示先)を可能な限り最短で比較するにはどうすればよいですか
ありがとう。
E D I T
wallacerとCode Monkeyに感謝します。char*とcharの比較ができるようになりました:
func1(char* ptr){
char someother_char[255];
char *ptr_char = NULL; //I have to strcmp a few values so this is why I initialize it first
...
ptr_char = someother_char;
if (strcmp(ptr,ptr_char) == 0) //gtfo and it does...
...
ptr_char = some2nd;
if(strcmp...
多分何か提案...(うーん、比較のための外部関数?)
Suggestion1(Code Monkeyによる)
#include <stdio.h>
int main(void) {
char tempchar[255];
tempchar[0] = 'a';
tempchar[1] = 'b';
tempchar[2] = '\0';
char *ptr_char;
ptr_char = &tempchar[0];
printf("%s", ptr_char);
return 0;
}
strcmp
を使用する必要があります。あなたがそれを使用しようとした方法を見ていない、これはあなたがそれを使用する方法です:
char *someother_char = "a";
char *pointer = "a";
if (strcmp(pointer, someother_char) == 0) { // match!
}
else { // not matched
}
次に、char
との比較を行うには、char*
に昇格する必要があります。
char *someother_char1;
char test = 'a';
char *pointer = "a";
strncpy((char*)test,someother_char1,sizeof(test));
if (strcmp(pointer, someother_char1) == 0) { // match!
}
else { // not matched
}
char
arrayを使用する場合は、逆参照する必要があります。
char char_array[255];
// don't forget to fill your array
// and add a null-terminating char somewhere, such as char_array[255] = '\0';
char *ptr_somechar = &char_array[0];
char *pointer = "a";
if (strcmp(pointer, ptr_somechar) == 0) { // match!
} else { // not matched
}
さて、すぐに、指示先を比較したい場合は、それらを逆参照する必要があります。これは、実際のchar値を比較するために、呼び出す必要があります
if (*pointer == someother_char)
ただし、これは配列の最初の文字のみを比較します。これは、おそらくあなたがやりたいことではありません。
Strcmpが機能するかどうか全体を比較するには
char* someother_str = "hello strstr";
if(strcmp(pointer, someother_str) == 0) {
// do something
}
他の文字列がchar *として宣言されていることを確認してください
詳細: http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
編集:コメントに従って。 char *とcharを比較しても意味がありません。 1つは文字値で、もう1つはメモリ内のアドレスです。そうする場合、char *を逆参照するか、value変数を参照することができます。
char c;
char* ptr;
// dereference ptr
if ( c == *ptr ) {
...
}
// reference the value
if ( &c == ptr ) {
}
最初のメソッドは、値が同じかどうかを確認します。 2番目は、ptrが実際にc ieを含むメモリを指しているかどうかをチェックします。 ptrはcへのポインタです
それが役に立てば幸い