我有以下功能结构
int function(const char *str)
{
return 0;
}
我永远无法完全理解为什么人们使用char *str
而不仅仅是string str
。所以我猜这基本上意味着参数是指向字符串第一个字符的指针。如何根据该参数确定字符串str
的长度?
我尝试的是迭代str
,如果我点击NULL
或""
或''
,那么这将是它的结束。但是,这些类型都不兼容进行比较。请给我一些关于此的线索。 THX!
答案 0 :(得分:4)
Jamesdlin的回答很好,但要回答关于比较的问题,你可以使用'\0'
,IE:
char* a = "a";
int size = 0;
while (a[size] != '\0')
size++;
NULL
是一个指针宏,""
是一个空字符数组(虽然它有一个隐式'\0'
,所以你理论上可以做strcmp(a, "");
)和{{ 1}}只是一个空洞的角色,我不确定它是否是一个有效的陈述。
此外,''
是C ++类,在C标准库中不存在。
答案 1 :(得分:3)
在C中,字符串通常以NUL终止。对于以NUL结尾的字符串,您只需拨打strlen(str)
。
我永远无法完全理解为什么人们使用char * str而不是简单地使用字符串str。
C中没有string
类型。您可以添加typedef
:
typedef char* string;
但是为指针类型添加typedef
通常是一个坏主意(因为现在您需要typedef
const char*
; const string
不{ em>是同一件事。)
虽然这样做似乎是一个好主意,但实际上它会模糊您的代码,因为char*
/ const char*
字符串是常态。
答案 2 :(得分:0)
您几乎是正确的,char *str
是指向char数组的第一个字符的指针,但C没有预定义的字符串类型 - 它只是一个以零结尾的char
数组。不要试图编写一个函数(虽然这将是一个很好的学生练习),只需在<string.h>
中使用strlen (str);
调用库函数,该函数将获取指向字符数组的指针。如果它是声明的数组变量,则不会传递*str
或&str
,而只传递str
。如果动态分配了内存,则传递已分配的指针,因此如果指针被声明为char *memstr
,则将其作为memstr
传递。正如其他人所说,最好不要尝试定义字符串,更好地理解char数组的工作原理。