Tag: 字符串

为什么字符串的字节大小比长度长?

为什么sizeof(“Bill”)是5但sizeof(char)是1 ? 不应该使sizeof(“Bill”)为4因为字符串的长度是4个字符( 4 x 1 )? 我相信它可能与”Bill”是一个字符数组有关,但为什么会增加字节大小?

如何测试指针数组的结尾?

#include int main(void) { char *t[10]={“Program”, “hjl”,”juyy”}; int i; //printf(“%c \n”,*t[3]); int ch=*t[0]; for(i=0;*t[i]!=’\0′;i++){ printf(“%d”,i); } return 0; } 该计划在一段时间内停止了工作。 任何人都可以解释原因吗?

char **应付字符串?

当我遇到char **时,我很困惑,是否真的有必要应对字符串? 例如: double strtod(const char *nptr,char **endptr); 如果endptr不为NULL,则指向停止扫描的字符的指针将存储在endptr指向的位置。 — MSDN 这很复杂,为什么不只是将指向字符的指针复制到endptr ? 调用之后的所有计算都可以通过将指针的值传递给endptr来实现。 真的需要char**吗?

指针算术的问题 – 尝试标记输入字符串

目前我正在开发一个程序,允许用户输入一个字符串然后进行标记化,然后使用指针数组将标记打印到屏幕上。 通过调用我的tokenize函数来“执行”这个操作,该函数读取输入字符串直到第一个分隔符(”,’,’,’。’,’?’,’!’)。 然后它将我的字符串中的分隔符更改为NULL char。 然后它应该返回一个指向我的字符串中的下一个字符的指针。 在输入字符串之后的main中,它应该继续调用tokenize函数,该函数返回指针,然后存储在指针数组中以便稍后打印我的标记。 一旦tokenize()返回一个指向NULL字符的指针,该字符位于我的字符串的末尾,它就会从该循环中断开。 然后我使用我的指针数组打印出令牌。 //试图详细说明 #include #include char *tokenize ( char *text, const char *separators ); int main ( void ) { char text[30]; char separators[6] = { ‘ ‘,’.’,’,’,’?’,’!’,’\0′}; char *pch = NULL; int tokens[15]; int i = 0; int j = 0; printf(“Enter a string: \n”); fgets( text, 30, […]

使用递归反转字符串

我从互联网上得到这个代码,但我无法得到整个代码。 例如if(*str) 。 这段代码是什么意思? 还可以返回一个字符串吗? 我认为main中的数组可以直接在函数中更改,但这里已经返回了.. #include #define MAX 100 char* getReverse(char[]); int main(){ char str[MAX],*rev; printf(“Enter any string: “); scanf(“%s”,str); rev = getReverse(str); printf(“Reversed string is: %s\n\n”,rev); return 0; } char* getReverse(char str[]){ static int i=0; static char rev[MAX]; if(*str){ getReverse(str+1); rev[i++] = *str; } return rev; }

尽管有0长度的缓冲区和编译器警告,scanf()仍可正常工作。 到底是怎么回事?

我的编译器(clang)显示以下消息: 11:17:warning: format specifies type ‘char *’ but the argument has type ‘char (*)[0]’ [-Wformat] scanf(“%s”, &name); ~~ ^~~~~ 1 warning generated. 从以下代码(问候程序): /* * Program: gretting2.c * Utility: Display a greeting with your name. * Author: Adrián Garro. */ #include int main () { char name[0]; printf(“——————-\n”); printf(“Write your name: \n”); printf(“——————-\n”); scanf(“%s”, &name); […]

为什么这个qsort()不起作用?

我正在排序一个字符串数组(不区分大小写)。 qsort导致分段错误,可能是我的演员不合适。 #include #include #include int compare(const void *string1, const void *string2) { char *a = (char*)(string1); char *b = (char*)(string2); printf(“comparing %s AND %s\n”, a, b); return strcasecmp(a,b); } void sortListName(char **fileList, int noOfFiles) { printf(“Sorting\n”); qsort(fileList, noOfFiles, 260*sizeof(char), compare); return; } ** fileList =字符串数组(文件名) PS main()显而易见,工作正常。

C字符串拆分问题

我正在写小型IRC Bot,我需要拆分传入的消息以便于处理。 我写了一个函数get_word ,它应该拆分字符串。 根据gdb和valgrind,问题是函数有时返回无效指针,并且程序在尝试释放该指针时失败。 这是代码: char **get_word(char *str) { char **res; char *token, *copy; int size = 1; for(int i = 0; str[i] != ‘\0’; i++) { if(str[i] == ‘ ‘) { while(str[i] == ‘ ‘) { i++; } size++; } } res = malloc((size + 1) * sizeof(char *)); copy = strdup(str); token […]

指向C的指针

如果“word”中的每个字母出现在“s”中,试图编写返回1的函数。 例如: containsLetters1(“this_is_a_long_string”,“gas”)返回1 containsLetters1(“this_is_a_longstring”,“gaz”)返回0 containsLetters1(“hello”,“p”)返回0 无法理解为什么不对: #include #include #define MAX_STRING 100 int containsLetters1(char *s, char *word) { int j,i, flag; long len; len=strlen(word); for (i=0; i<=len; i++) { flag=0; for (j=0; j<MAX_STRING; j++) { if (word==s) { flag=1; word++; s++; break; } s++; } if (flag==0) { break; } } return flag; } int main() […]

字符串数组初始化

这是我的另一个问题的延续。 请考虑以下代码: char *hi = “hello”; char *array1[3] = { hi, “world”, “there.” }; 它没有编译到我的意外(显然我不知道C语法以及我认为)并生成以下错误: error: initializer element is not constant 如果我将char *更改为char [],则编译正常: char hi[] = “hello”; char *array1[3] = { hi, “world”, “there.” }; 有人可以向我解释原因吗?