Tag: strlen

GCC中strlen()的实现在哪里?

有人能指出我在GCC中对strlen()的定义吗? 我现在大约半小时一直在试用版本4.4.2(当谷歌疯狂时),我似乎无法找到strlen()实际实现的位置。

如何在格式化字符串上使用strlen()?

我想为mvwprint / mvwchgat ncurses函数编写一个包装函数,它在指定的窗口中打印消息,然后更改其属性。 但是, mvwchgat需要知道它应该改变多少个字符 – 而且我不知道如何告诉mvwchgat格式化字符串有多长,因为strlen() on,例如”abc%d”显然会返回5,因为strlen不知道%d代表什么…

字符串比C中的预期长

这是我的代码 #include #include int main(){ char pal[8] = “ciaooaic”; char pal1[7] = “ciaoaic”; int lenPal = strlen(pal); int lenPal1 = strlen(pal1); printf(“strlen(‘%s’): %d\n”, pal, lenPal); printf(“strlen(‘%s’): %d\n”, pal1, lenPal1); return 0; } 问题是,当我运行此代码时,输​​出是: strlen(‘ciaooaicP@’): 11 strlen(‘ciaoaic’): 7 第一个字符串还有一个P和@之间的另一个不可打印的字符。 我是个菜鸟,所以也许我错过了一些明显的东西。 有人能帮我吗? 编辑: 只需给一个额外的空间,比如char pal [9] =“ciaooaic”; char pal1 [8] =“ciaoaic”; 它有效,但为什么呢? 我明白应该有\ 0的空间,但“ciaoaic”没有它的工作……

strlen函数在c中使用递归

我是kida对递归主题的新手,并且我一直在尝试使用recurion来编写“strlen”函数,这就是我尝试过的: int strlen ( char str[], int i) { if ( str[i] == 0) return i+1; return strlen(str,i++); } 我尝试了一些非常相似的东西 int strlen( char str[], int i) { if ( str[i] == 0) return 1; return strlen(str,i++) + 1; } 在我的主要function int main() { char word[MAX_DIGITS]; scanf(“%s”,word); printf(“%d”, strlen(word,0)); return 0; } 但是每当我运行它时我的程序都会崩溃,我错过了什么? (我用的是C90顺便说一句)

警告:内置函数’strlen’和’strcpy’不兼容的隐式声明

我刚刚完成了我的刽子手游戏,作为最后一步,我正在进行一些代码清理和优化,但我似乎无法理解为什么我会收到以下两个警告: 警告:内置函数’strlen’的不兼容隐式声明 警告:内置函数’strcpy’的不兼容隐式声明 使用它们的代码在这里: for(i = 1; i <= random; i++) fgets(word, 100, f); fclose(f); for(i = 0; i < strlen(word); i++) if(word[i] == '\n') word[strlen(word)-1] = '\0'; lungime = strlen(word); strcpy(word2, word); 我所做的是使用fgets从文件中读取随机单词。 在此之后,我删除了fgets自动放置的’\ n’。 最后,我在word2中复制了这个单词。 二手图书馆: #include #include #include 变量声明: int random, n = 0, i, j, lengh, tries = 5, ok = […]

strlen()应该在这段代码中返回什么?

#include #include #include int main(void) { char qq[] = {‘a’ , ‘b’ , ‘c’ , ‘d’}; char qqq[] = “abcd”; printf(“%d\n” , sizeof qq / sizeof qq[0]); // line A printf(“%d\n” , strlen(qq)); // line B printf(“%d\n” , sizeof qqq / sizeof qqq[0]); // line C printf(“%d\n” , strlen(qqq)); // line D system(“pause”); return 0; […]

strlen是否具有未初始化值的字符串未定义行为?

strlen返回终止空字符前面的字符数。 strlen的实现可能如下所示: size_t strlen(const char * str) { const char *s; for (s = str; *s; ++s) {} return(s – str); } 此特定实现取消引用s ,其中s可能包含不确定的值。 它相当于: int a; int* p = &a; *p; 因此,例如,如果要执行此操作(这会导致strlen提供不正确的输出): char buffer[10]; buffer[9] = ‘\0’; strlen(buffer); 是不确定的行为?

如何在C中找到argv 的长度

#include #include #include int main(int argc, char *argv[]){ int fir; //badly named loop variable char *input[] = calloc( strlen(argv), sizeof(char)); //initializing an array for( fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv strcat(input, argv[fir]); // appending to input } } 我得到的错误是第7行。它说“从不兼容的指针类型传递’strlen’的参数1”。 我得到了strcat函数的相同错误。 它还说“给了一个char **但是期望一个const char * ”这两个函数。 我正在尝试使用argv所有元素填充一个新数组,除了第一个。 我试过argv = &argv[1]但它没有用。 […]

我可以依靠我的编译器来优化const char *上的strlen吗?

在我的SAX xml解析回调(XCode 4,LLVM)中,我正在对这种类型的代码进行大量调用: static const char* kFoo = “Bar”; void SaxCallBack(char* sax_string,…..) { if ( strcmp(sax_string, kFoo, strlen(kFoo) ) == 0) { } } 假设strlen(kFoo)由编译器优化是否安全? (Apple示例代码已经预先计算了strlen(kFoo),但我认为这对于大量常量字符串很容易出错。) 编辑:优化的动机:使用NSXMLParser在iPod touch 2G上解析我的SVG地图需要5秒钟(!)。 所以,我想切换到lib2xml,并优化字符串比较。

str预处理器中的strlen?

是否可以在C预处理器中实现strlen() ? 鉴于: #define MYSTRING “bob” 是否有一些预处理器宏, X ,让我说: #define MYSTRING_LEN X(MYSTRING)