Tag: 字符串

在C中查找字符数组的保留内存大小

我正在努力学习C,作为一个开始,我开始为自己的练习写一个strcpy。 我们知道,原来的strcpy容易出现安全问题所以我给自己写了一个“安全”strcpy的任务。 我选择的路径是检查源字符串(字符数组)是否实际适合目标内存。 正如我所理解的,C中的字符串只不过是指向字符数组的指针,0x00终止。 所以我的挑战是如何找到编译器实际为目标字符串保留了多少内存? 我试过了: sizeof(dest) 但这不起作用,因为它将返回(我后来发现)dest的大小,它实际上是一个指针,在我的64位机器上,将始终返回8。 我也尝试过: strlen(dest) 但这不起作用,因为它只会返回长度,直到遇到第一个0x0,这不一定反映保留的实际内存。 所以这一切总结为以下问题:如何找到编译器为我的目标“字符串”保留了多少内存? 例: char s[80] = “”; int i = someFunction(s); // should return 80 什么是“someFunction”? 提前致谢!

创建此数组时分配的内存在哪里? (C)

假设我做了类似的事情: char* test[] = {“foo”,”bar”,”car”}; 如果我做了很长的路,那究竟是什么呢? 这会自动创建我需要释放的内存吗? 我有点困惑。 谢谢。

找到以另一个文本开头的文本

C是否有任何方法可以在另一个文本中找到文本? 例如, text = “abaHello” , textneedtoSearch = “Hello”; 。 如果text包含”Hello” ,则return true, else return false 。

C字符串的比较运算符

我在查找比较C字符串的信息时遇到了一些困难。 我明白,与C ++不同,C不支持运算符重载,所以我想知道是否有办法检查一个字符串是否大于/小于另一个(例如str1> str2)? 提前感谢您的回复。 老实说,这是我实际上不得不问一个问题的第一次,因为我找不到相关的post。

如何从信号编号中获取人类可读的描述?

POSIX标准或其他C标准是否提供了一种从信号编号中恢复有意义消息的方法,就像strerror()可以从errno恢复消息一样? Gnu C库有strsignal() ,但是如果可能的话,我想要一些可移植到BSD和其他Unix变种的东西。

如何将字节缓冲区中以null结尾的字符串转换为Go中的字符串?

这个: label := string([]byte{97, 98, 99, 0, 0, 0, 0}) fmt.Printf(“%s\n”, label) 这样做( ^@是空字节): go run test.go abc^@^@^@

char数组前面的&符号会影响scanf吗? 它合法吗?

当我们通常输入字符串时,我们这样做: #include int main() { char str[256]; scanf(“%s”,str); //Other Operation } 但是,今天,在编程课上,我的一个朋友写了这样的scanf行: scanf(“%s”,&str); 它通过编译,并工作。 问题是,我想知道这是否在C中是“合法的”,还是只是一个未定义的行为?

在C中返回字符串的正确方法

我有以下代码: char* get_address_string(PACKAGE* pkg){ char *c; sprintf(c, “%02x:%02x:%02x:%02x:%02x:%02x”, pkg->address[0], pkg->address[1], pkg->address[2], pkg->address[3], pkg->address[4], pkg->address[5]); return c; } 代码工作正常。 但是,我知道这不是在C中返回字符串的正确方法。我收到警告“c在此函数中使用未初始化”。 在C中编写此函数的正确方法是什么?

字符串文字是否在C中编译时自动转换为char *?

如果我要做的事情如下: printf(“The string is: %s\n”, “string1”); 在编译时完成以下操作: printf(“The string is: %s\n”, (unsigned char*) “string1”); 还是类似的?

C – 从函数返回数组

我正在尝试创建一个在C中返回字符串数组的函数。我在网站上查看了一些其他问题并尝试了一些解决方案,但似乎没有任何效果。 我已经尝试过(1)只是更改函数来更改数组内容而不是返回它,我已经尝试过(2)显式返回arrayz,但似乎都不起作用。 方法#1:在一个文件中,function: int getArray(int num, char** array) { int i; for (i = 0; i < num; i++) array[i] = "whatever"; return 0; } 在另一个文件中,我调用该函数: char** array = malloc(sizeof(char*) * num)); getArray(num, files); 当我尝试打印数组文件的内容时,没有任何显示。 方法#2:在一个文件中,function: char** getArray(int num) { int i; char** array = malloc(sizeof(char*) * num)); for (i = 0; i < num; […]