我有一个返回字符指针的函数 原型如下所示。
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程序中缺少一些基本概念。 请指导我。
答案 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 ) { /*...*/ }