C比较指针(与字符)

晚上好,我有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 *与charchar *比较为char *我需要两种解决方案吗?

那么,如何以最短的方式比较这些指针(实际上是指针)?

谢谢。

编辑

感谢wallacer和Code Monkey现在用于char * to 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... 

任何建议可能…(嗯外部function比较?)

建议1(由Code Monkey提供)

 #include  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 数组,那么你必须取消引用:

 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) 

但是这只会比较数组中的第一个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并没有多大意义。 一个是字符值,另一个是内存中的地址。 这样做,您可以取消引用char *或引用值变量。

 char c; char* ptr; // dereference ptr if ( c == *ptr ) { ... } // reference the value if ( &c == ptr ) { } 

第一种方法检查值是否相同。 第二个检查ptr是否实际指向包含c ie的内存。 是ptr指向c的指针

希望有所帮助

使用函数srtncmp no srtcmp。

 int res = strncmp(str, "¿Cuál es tu nombre? ", 100); 

请参阅下一个链接

比较字符串

字符串以空值终止。 当您使用这种类型的字符串时,与其他内存复制function混合不是一个好主意。 执行memcpy操作后,请注意您的目标字符串不会以空值终止。 memcmp是一种快速操作。 否则你可以简单地遍历每个角色并在找到差异时退出。 要使用strcmp,请确保两个字符串都以null结尾。 否则会导致一些崩溃。

我建议你使用像strcmp,strlen,strcpy这样的字符串函数来处理字符串,因为它实际上已经实现了。

除非两个指针都指向相同的内存位置,否则无法比较两个指针。 指针只是内存位置的地址。 你真正想要做的是,比较内容而不是比较它存储的地址。 所以请使用strcmp,但我再次发出警告,确保它已终止。