返回字符指针并与字符串进行比较

时间:2015-10-29 10:18:24

标签: c pointers

我有一个返回字符指针的函数 原型如下所示。

char *substring(char *string, int position, int length);

调用函数

char *temp1;
temp1 = substring(de1Binary, FieldNo - 1, 1);

返回指针,如果用%s打印它显示temp1 = 1 在此之后执行以下代码

if (temp1 == "1")
{
     Inside loop
}

但它不会进入循环内部。我认为我在C程序中缺少一些基本概念。 请指导我。

2 个答案:

答案 0 :(得分:2)

如果要比较两个字符串,请使用strcmp()函数,它位于string.h头文件中。

而不是if(temp1 ==“1”)你可以使用下面的if语句。

if((strcmp(temp1, "1")) == 0)
{
     Inside loop
}

答案 1 :(得分:1)

问题在于,如果你甚至写

if ("1" == "1")

无法保证此条件会产生true。这取决于编译器选项。它可以分别存储每个相同的字符串文字,在这种情况下,它们将具有不同的地址或仅存储一个相同文字的字符串文字。

字符串文字具有字符数组的类型。在if-condition中,字符串文字被隐式转换为指向其第一个字符的指针。所以在这个声明中

if (temp1 == "1")

将temp1中存储的地址与存储在内存中的字符串文字“1”的第一个字符的地址进行比较

{ '1', '\0' }

因此,如果在if语句之前写入,则此条件将始终产生false或者为true或false(取决于编译器选项)

temp1 = "1"; 

您需要比较这两个指针指向的字符串而不是指针本身。你可以这样做,例如以下方式

if ( temp1[0] == "1"[0] && temp1[1] == '\0' )  {*...*/ }

if ( temp1[0] == '1' && temp1[1] == '\0' )  {*...*/ }

想象一下,例如你有一个清单常量

#define One "1"

在这种情况下你可以写

if ( temp1[0] == One[0] && temp1[1] == '\0' )  {*...*/ }

但是使用标头strcmp中声明的标准C函数<string.h>要好得多,如果两个字符串相等则返回0。

if ( strcmp( temp1, "1" ) == 0 ) { /*...*/ }