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 *与char和char *比较为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,但我再次发出警告,确保它已终止。