Tag: char

如何动态分配2d字符数组?

我想动态分配一个二维数组来存储字符串。 我最初声明这个数组是这样的: char lines[numlines][maxlinelength]; 然而,当numlines非常庞大时,这会给我一个堆栈溢出。 如何动态分配它以防止堆栈溢出?

关于char和严格别名的通用指针

我不知道为什么下面的代码工作正常,没有gcc错误( -fstrict-aliasing -Wstrict-aliasing=1 )。 #include int main(void) { char n = 42; char *p = &n; int *q = (int *)p; *q = 10; printf(“%d|%d\n”, *p, *q); return 0; } 如果我遵循严格的别名规则: n1570,§6.5表达式 对象的存储值只能由具有以下类型之一的左值表达式访问: – 与对象的有效类型兼容的类型, – 与对象的有效类型兼容的类型的限定版本, – 对应于对象的有效类型的有符号或无符号类型, – 对应于对象有效类型的限定版本的有符号或无符号类型, – 聚合或联合类型,其成员中包含上述类型之一(包括递归地,子聚合或包含联合的成员),或者 – 一个字符类型。 但*q没有与*p兼容的类型,无论是合格版本,还是对应的有符号或无符号类型,都是字符类型。 那么,为什么允许这样做呢?

用C标记字符串?

我正在研究用C编写的计算器的终端解析器。我无法弄清楚如何连接运算符之间的所有数字以将它们放入数组中。 例如,如果输入(命令行参数)是“ 4+342 ”,则理想情况下input[] = {“4”, “+”, “342”} 。 到目前为止,这是我的代码。 我包括 , 和 。 typedef char * string; int main(int argc, char *argv[]) { string inputS = argv[1]; string input[10]; string temp; printf(“%s\n”, inputS); int i; int len = strlen(inputS); printf(“parsed:\n”); for(i = 0; i < len; inputS++, i++) { if(isdigit(*inputS)) { printf("%c",*inputS); } else […]

JNI Pass Char * 2Darrays到JAVA代码

我想通过C代码中的JNI层传递以下指针数组 char *result[MAXTEST][MAXRESPONSE] = { { “12”, “12”, “” }, { “8”, “3”, “” }, { “29”, “70”, “” }, { “5”, “2”, “” }, { “42”, “42”, “” } }; 在java代码中,我写了以下声明 public static native String[][] getResult(); 我很困惑如何将该数组通过JNI层传递给Java代码??? 以下是JNI层描述 JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult (JNIEnv *env, jclass thiz) { Confused over here ???? }

如何动态地将字符添加到数组中? 没有预定义的arrays?

如果我想将char添加到char数组,我必须这样做: #include int main() { int i; char characters[7] = “0000000”; for (i = 0; i 2) { break; } } for (i = 0; i < 7; i++) { printf("%c\n", characters[i]); } return 0; } 为了防止打印任何奇怪的字符,我必须初始化数组,但它不灵活。 如何动态地将字符添加到char数组? 就像你在Python中一样: characters = [] characters.append(1) …

跟踪malloc分配的内存量

在对SO的相关问题进行快速扫描之后,我推断出没有能够检查malloc已分配给指针的内存量的函数。 我正在尝试使用C中的简单char *来复制一些std :: string基本function(主要是动态大小),并且不想一直调用realloc。 我想我需要跟踪已经分配了多少内存。 为了做到这一点,我正在考虑创建一个包含字符串本身的typedef和一个当前分配的内存量的整数,如下所示: typedef struct { char * str; int mem; } my_string_t; 这是一个最佳解决方案,或者您可以建议一些能够带来更好结果的方案吗? 在此先感谢您的帮助。

在C中正确地将const void指针强制转换为const char指针数组

我有一段看起来像这样的C代码: const char (*foo)[2] = bar(); 现在bar()是一个返回(const void *) 。 如何正确转换此const指针? 该代码从GCC产生此警告: “initialization discards qualifiers from pointer target type”. 以下是我不成功的一些尝试: const char (*foo)[2] = (const char *)bar(); const char (*foo)[2] = (const void **)bar(); 原始代码确实有效,我只是无法通过正确转换返回值来消除警告。 编辑:有人建议: const char (*foo)[2] = (const char (*)[2])bar(); 它似乎是正确的,但GCC给出了这个警告: “cast discards qualifiers from pointer target type” 这几乎与原始警告相同。 编辑2:好的,我想我已经知道了。 这里真正的问题是bar()的( const […]

将整数值存储在C中的字符数组中

这是一个非常微不足道的问题,但我不知道为什么我没有得到正确的输出。 这是我想要做的: char sendBuffer[1000]; int count=0: while(count<10) { sendBuffer[0]=count; sendBuffer[1]='a'; sendBuffer[2]='b'; sendBuffer[3]='c'; sendBuffer[4]='\0'; printf(%s,sendBuffer); count=count+1; } 在输出中,除第一个索引外,所有缓冲区都正确打印。 我希望在缓冲区的开头打印1,2,3等等,但它不起作用。 请帮忙

C从文件中删除最后n个字符

我需要使用C代码从文件中删除最后n个字符。 首先我试图使用’\ b’,但它返回一个分段错误。 我在这里和这里看到了类似问题的有趣答案,但我更愿意使用mmap函数来做到这一点,如果可能的话。 我知道通过创建临时文件来截断文件,并将chars写入temp直到原始文件的某个偏移量可能更简单。 问题是我似乎不明白如何使用mmap函数来做到这一点,看不出我需要传递给那个函数的参数,特别是address , length和offset 。 从我读过的内容来看,我应该在flags使用MAP_SHARED在PROT_READ|PROT_WRITE使用PROT_READ|PROT_WRITE 。 函数定义说: void * mmap (void *address, size_t length, int protect, int flags, int filedes, off_t offset) 这是我的主要内容: int main(int argc, char * argv[]) { FILE * InputFile; off_t position; int charsToDelete; if ((InputFile = fopen(argv[1],”r+”)) == NULL) { printf(“tdes: file not found: %s\n”,argv[1]); } […]

C:声明一个指向常量字符数组的常量指针

我试图理解数组声明,constness及其生成的变量类型。 允许以下内容(由我的编译器): char s01[] = “abc” ; // typeof(s01) = char* const char s02[] = “abc” ; // typeof(s02) = const char* (== char const*) char const s03[] = “abc” ; // typeof(s03) = char const* (== const char*) 或者,我们可以手动声明数组大小: char s04[4] = “abc” ; // typeof(s04) = char* const char s05[4] = “abc” ; […]