Tag: 字符串

在C中将内存分配给char ***

所以,我在为char ***类型变量分配内存时遇到了麻烦。 我的目标是创建一个字符串矩阵,我目前用于内存分配的代码如下: char ***matrix; matrix = calloc(n*MAX_STR, sizeof(char**)); for(z = 0; z < n; z++) { matrix[z] = calloc(n, sizeof(char*)); for(i = 0; i < MAX_STR; i++) { matrix[z][i] = calloc(MAX_STR, sizeof(char)); } } 我已成功为字符串数组分配内存,使用: char **list; list = calloc(n, sizeof(char *)); for (j = 0; j < n; j++){ list[j] = calloc(MAX_STR, sizeof(char)); […]

数组类型char 不可分配

那么这是我的第一篇文章。 我一直在尝试做这个选择选择的东西,我希望用户只选择数字而不是键入它们(更容易)但是当我希望数字等于一个字符串时,它说“数组类型char[30]不是分配”。 即使在后面我也放了分号。 #include int main() { int choice1; char word[30]; printf(“You have three choice.\n”); printf(“[1] Jump [2] Run [3] Dance\n”); scanf(“%d”,&choice1); if (choice1 == 1) { word = “Jump” //Error #1 } else if (choice1 == 2) { word = “Eat” //Error #2 } else if (choice1 == 3) { word = “Sleep”; //Error […]

strcpy()有什么问题? (分段故障)

这段代码中的strcpy()有什么问题? void process_filedata(char *filename) { void* content; const char * buffer; char * temp; char * row; char * col; int lsize,buflen,tmp,num_scan; //num_scan – number of characters scanned int m=0,p=0,d=0,j=0; //m – machine, p – phase, d- delimiter, j – job FILE *file_pointer = fopen(“machinetimesnew.csv”,”r”); if(file_pointer == NULL) { error_flag = print_error(“Error opening file”); if(error_flag) […]

字符串和char数组如何在C中工作?

我见过的导游似乎没有解释得这么好。 我的意思是,你可以为char*分配内存,或者写char[25]而不是? 有什么不同? 还有文字,不能被操纵? 如果要将固定字符串分配给变量,该怎么办? 比如, stringVariable = “thisIsALiteral” ,那么你之后如何操纵呢? 有人可以直接在这里设置记录吗? 在最后一种情况下,使用文字,你如何处理空终止? 我觉得这很令人困惑。 编辑:真正的问题似乎是,据我所知,你必须兼顾这些不同的结构,以完成甚至简单的事情。 例如,只有char *可以作为参数或返回值传递,但只能为char[]分配文字和修改。 我觉得很明显,我们经常/总是需要能够做到这两点,这就是我的陷阱所在。

创建导致字符串的FILE *流

我正在寻找一种方法将FILE *传递给某个函数,以便函数可以使用fprintf写入它。 如果我希望输出在磁盘上的实际文件中出现,这很容易。 但我想要的是将所有输出作为字符串( char * )。 我喜欢的那种API是: /** Create a FILE object that will direct writes into an in-memory buffer. */ FILE *open_string_buffer(void); /** Get the combined string contents of a FILE created with open_string_buffer (result will be allocated using malloc). */ char *get_string_buffer(FILE *buf); /* Sample usage. */ FILE *buf; buf = open_string_buffer(); […]

逐字反转字符串

我能够反转一个字符串。 例如,我可以将“反向字符串”反转为“esrever a gnirts”。 但是我无法像“字符串反向”那样逐字翻转它。 void reverseString(char string[],char *start, char* end) { char tmp; //temporary variable to swap values int count = 0; while(start<end) { if(*start==' ') { printf("found space count %d \n",count); reverseString(string,start-count,start); } tmp = *start; *start = *end; *end = tmp; *start++; *end–; count++; } printf(" string %s \n", string); } int […]

尝试validation新行删除后,新行删除无效

我正在制作一个代码来解析一些输入数据并以特殊格式将其写入文件。 我正在从每个字符串标记中删除换行符,如下所示: token[strlen(token)-2] =’\0′ 它是-2因为最后一个元素是\0 。 这很有用。 但是,输入数据的最后一个元素没有换行符,因此使用它最终会从最后一个输入集中删除倒数第二个字符。 original input: 0.38 after running it through the removal: 0.3 显而易见的解决方案是在删除之前检查换行是否存在。 我这样做: if(token[strlen(token)-2] ==’\n’) token[strlen(token)-2] =’\0′; 但是,添加if子句后,不再删除换行符! 我究竟做错了什么? 来自整个代码的Snippit: while((token = strsep(&line, “,”)) != NULL){ if(x++ == 1){ fwrite(” \n”, 11, 1, fw); fwrite(” “, 14, 1, fw); fwrite(token, strlen(token), 1, fw); fwrite(“\n”, 8, 1, fw); } […]

当我尝试修改字符串常量时,为什么会出现分段错误?

可能重复: 为什么在写入字符串时会出现分段错误? 我希望这个程序的输出是:ibjgsjfoet但是我得到了一个分段错误。 #include int main() { char *p=”haifriends”,*p1; p1=p; while(*p!=’\0′) ++*p++; printf(“%s %s”,p,p1); return 0; }

限制C字符串中hex转义序列的长度

在字符串文字中,如何使用可以解释为hex数字的文字字符立即跟随hex转义序列? 例如,如果我写这个文字…… “BlahBlah\x04BlahBlah” …紧跟在’4’之后的’B’将被解释为hex转义的一部分,因为它是一个有效的hex数字。 如果将’4’作为hex转义的最后一个字符,我怎么能写一个字符串文字来表示上面代表的字符串?

为什么这个程序会出现分段错误?

这是一个初学者的问题:为什么这会打破/给出错误? #include #include #include char *strtrim_right(char *p) { char *end; int len; len = strlen( p); while (*p && len) { end = p + len-1; if(isalpha(*end)) *end =0; else break; } return(p); } int main () { char *x=”PM123BFD”; strtrim_right(x); printf(“%s”, x); return 0; }