“的等价物是什么?”;尺寸“t”;在C中?
假设我想做一个函数,比如“的等价物是什么?”;尺寸“t”;在C中?,c,arrays,memory,C,Arrays,Memory,假设我想做一个函数,比如 int indexOf ( char * str, char c ) { // returns the index of the chracter c in the string str // returns -1 if c is not a character of str int k = 0; while (*str) { if (*str == c) break; else ++str; } retu
int indexOf ( char * str, char c )
{
// returns the index of the chracter c in the string str
// returns -1 if c is not a character of str
int k = 0;
while (*str)
{
if (*str == c) break;
else ++str;
}
return *str ? k : -1;
}
但我想让它尽可能可靠。例如,仅当保证最大int
大于或等于字符数组的最大大小时,上述方法才有效。如何用纯C语言覆盖所有的基础?使用指针
您将始终能够返回指向数组中有效元素的指针。未找到的条件通过返回NULL来表示。使用指针
您将始终能够返回指向数组中有效元素的指针。未找到的条件通过返回NULL来表示。
不,说真的<代码>大小\u t是标准的C类型。它在
中定义
(这就是“C中的“大小”的等价物是什么?”)
对于您编写的确切函数,strchr
更合适-调用者可以这样使用它:
const char* str = "Find me!find mE";
char* pos = strchr(str, '!');
if(pos) // found the char
{
size_t index = (pos - str); // get the index
// do the other things
}
else
{
// char not found
}
所以,一般来说,如果您想在用户提供的数组中找到一些东西,返回指针在C语言中是最常用的
您可以返回ssize\u t
(其中包括size\u t
和-1
的所有可能值),但它不是标准的C,因此我不建议使用它。我提到它只是为了完整。
不,说真的<代码>大小\u t是标准的C类型。它在
中定义
(这就是“C中的“大小”的等价物是什么?”)
对于您编写的确切函数,strchr
更合适-调用者可以这样使用它:
const char* str = "Find me!find mE";
char* pos = strchr(str, '!');
if(pos) // found the char
{
size_t index = (pos - str); // get the index
// do the other things
}
else
{
// char not found
}
所以,一般来说,如果您想在用户提供的数组中找到一些东西,返回指针在C语言中是最常用的
您可以返回
ssize\u t
(其中包括size\u t
和-1
的所有可能值),但它不是标准的C,因此我不建议使用它。我提到它只是为了完整。将您的问题解释为:
指针算法如何不依赖索引大小?
答案是:
int indexOf ( char * str, char c )
{
// returns the index of the chracter c in the string str
// returns -1 if c is not a character of str
char *aux = str;
while (*aux != c )
{
if (*aux == '\0')
return -1;
aux++;
}
return aux - str;
}
将你的问题解释为:
指针算法如何不依赖索引大小?
答案是:
int indexOf ( char * str, char c )
{
// returns the index of the chracter c in the string str
// returns -1 if c is not a character of str
char *aux = str;
while (*aux != c )
{
if (*aux == '\0')
return -1;
aux++;
}
return aux - str;
}
C99标准中存在大小,您说“纯C”是什么意思?您是否应该在该循环中递增
k
?确切的意思是“例如,如果保证最大int大于或等于字符数组的最大大小,则上述方法才有效”?我试图理解这个问题。@Shondeslich的意思是,如果C99标准中存在INT\u MAX>=strlen(str)
size\t,那么你说“纯C”是什么意思?你应该在循环中增加k
?确切的意思是什么“例如,仅当保证最大int大于或等于字符数组的最大大小时,上述方法才有效”?我试图理解这个问题。@shondeslich他的意思是如果int\u MAX>=strlen(str)
为什么要否决?这是在C中执行strchr
的正确方法,没有问题。为什么要否决?这是在C中执行strchr
的正确方法,没有问题。我想OP会好奇如何处理return-1
部分代码。OP知道大小。\u不存在。但是你的答案不存在t显示如何返回-1或等效值。@2501我认为问题只需要知道字符是否在字符串和索引中。如果返回值与-1不同,而您知道哪一个是确认所需内容的返回值就可以了。(但是,您是正确的)我想OP会很好奇如何处理他的部分代码return-1
。OP知道存在的大小。但是你的答案没有显示如何返回-1或等效值。@2501我想问题只需要知道字符是否在字符串和索引中。如果返回值不同于-1,而你知道哪个是ret确认所需内容的urn是可以的。(但是,您是正确的)如果是另一种类型,除法无论如何都是错误的。ptr+1
指向下一个元素,而不是下一个字节。你是对的,我认为两个指针之间的操作会忽略类型大小。如果是另一种类型,除法无论如何都是错误的。ptr+1
指向下一个元素,而不是下一个字节。你是对的对,我认为两个指针之间的操作会忽略类型大小。