晚上好,我有两个函数,每个函数都接受一个指向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;
}
答案 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)
答案 3 :(得分:-1)
字符串以空值终止。当您使用这种类型的字符串时,与其他内存复制功能混合不是一个好主意。 执行memcpy操作后,请注意您的目标字符串不会以空值终止。 memcmp是一个快速的操作。否则你可以简单地遍历每个角色并在找到差异时退出。 要使用strcmp,请确保两个字符串都以null结尾。否则会导致一些崩溃。
我建议你使用像strcmp,strlen,strcpy这样的字符串函数来处理字符串,因为它实际上已经实现了。
除非两个指针都指向相同的内存位置,否则无法比较两个指针。指针只是内存位置的地址。你真正想要做的是,比较内容而不是比较它存储的地址。所以请使用strcmp,但我再次警告你确保它是空的终止。