C比较指针(用字符)

时间:2011-08-19 18:18:32

标签: c string pointers compare

晚上好,我有两个函数,每个函数都接受一个指向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 * 进行比较,我需要两种解决方案吗?

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

感谢。

E D I T

感谢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...

任何建议可能......(嗯外部函数用于比较?)

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;
}

4 个答案:

答案 0 :(得分:21)

您需要使用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
}

答案 1 :(得分:1)

好吧,如果你想比较一下,你需要取消引用它们。这意味着要比较实际的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真的没有意义。一个是字符值,另一个是内存中的地址。这样做,您可以取消引用char *或引用值变量。

char c;
char* ptr;

// dereference ptr
if ( c == *ptr ) {
   ...
}

// reference the value
if ( &c == ptr ) {

}

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

的指针

希望有所帮助

答案 2 :(得分:0)

使用函数srtncmp no srtcmp。

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

参见下一个链接

compare strings

答案 3 :(得分:-1)

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

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

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