Tag: char

C问题:为什么char实际占用内存中的4个字节?

我写了一个小程序来检查我的内存中char占用了多少字节,它显示char实际占用内存中的4个字节。 我理解这主要是因为字对齐并且没有看到char只有1个字节的优点。 为什么不使用4个字节的char? int main(void) { int a; char b; int c; a = 0; b = ‘b’; c = 1; printf(“%p\n”,&a); printf(“%p\n”,&b); printf(“%p\n”,&c); return 0; } 输出:0x7fff91a15c58 0x7fff91a15c5f 0x7fff91a15c54 更新:我不相信malloc只会为char分配1个字节,即使sizeof(char)作为参数传递,因为malloc包含一个标题将确保标题是字对齐的。 任何意见? Update2:如果要求你有效地使用没有填充的内存,唯一的方法是创建一个特殊的内存分配器? 或者是否可以禁用填充?

printf()打印整个数组

假设我的C程序中有以下代码: #include void PrintSomeMessage( char *p ); int main(int argc, char *argv[]) { char arr[10] = “hello”; PrintSomeMessage(&arr[0]); return 0; } void PrintSomeMessage(char *p) { printf(“p: %s”,p); } 为什么输出的结果是“你好”而不是单个字符“h”? 但我明白,如果我在格式化程序中放入”%c” ,它将只打印一个字母。 但是,此地址中每个字母的内存地址都不同。 请有人向我解释一下吗?

C中的char指针初始化

关于字符指针以及它们是如何工作的我不太清楚。 该程序构建,但运行时崩溃。 char *ab = NULL; //ab = “abc123”; // works fine sprintf(ab, “abc%d”, 123); // this line seems to crash the program 当sprintf接受(char * str)作为第一个参数时,我不明白这是怎么回事。 有人可以向我解释一下吗?

正确初始化无符号字符的方法*

初始化unsigned char*的正确方法是什么? 我目前正在这样做: unsigned char* tempBuffer; tempBuffer = “”; 或者我应该使用memset(tempBuffer, 0, sizeof(tempBuffer)); ?

签署一个字符是什么意思?

鉴于有符号和无符号整数使用相同的寄存器等,并且只是不同地解释位模式,C字符基本上只是8位整数,C中有符号和无符号字符之间的区别是什么? 我理解char的签名是实现定义的,我根本无法理解它是如何产生影响的,至少当char用于保存字符串而不是数学时。

在C中将Char转换为String

如何将字符转换为C中的字符串。我目前正在使用c = fgetc(fp)返回一个字符。 但是我需要在strcpy中使用一个字符串

sizeof为null终止的const char *

const char* a; 如何确保字符串’a’为空终止? 当a =“abcd”并且我做sizeof(a)时,我得到4.这是否意味着它不是以null结尾? 如果是的话,我会得到5?

在C中初始化字符串的正确方法

我见过人们的代码: char *str = NULL; 而且我也看到了这一点, char *str; 我想知道,初始化字符串的正确方法是什么? 什么时候你应该初始化一个字符串w /和w / out NULL?

返回的字符串值变为垃圾

我试图将字符array值传递给字符pointer 。 然后将此值返回给正在调用它的方法,但在返回之后,该值将变为垃圾。 谁能帮我? #include const char * getname(){ char nam[10]; char * name; gets(nam); name = nam; return name; } main(){ printf(“%s”,getname()); getch(); } 一切都很好,直到字符串返回

char *和char 之间的区别

我已经阅读了很多关于它的线索和问题并阅读了很多答案,但仍然难以理解差异以及何时应该使用什么? 我认为你应该在需要存储数据时使用char *而你不知道它的大小,因为它是动态的。 另外我不确定我是对的,但是如果你声明一个char *并且给它分配一个像这样的文字文本,我不明白我的理解:char * ch =“hi”; 它是一个你无法改变的常量,如果你试图改变它,你只需将ch指向另一个分配的存储空间来保存新字符串? 如果这样写:char ch = malloc(20); 然后你可以改变价值,如果你这样做:char ch [] =“hi”; char pch = ch; 您可以更改值,因为您指向数组并且数组指向ch [0]? 所有用粗体写的都是我从阅读中理解的,虽然我可能对我刚才说的大部分内容都是错的,这就是为什么我需要一个非常好的简单解释,所以我可以一劳永逸地理解差异,当我应该用什么。 编辑: #include main() { char ch[] = “Hello”; char *p1 = ch; char *p2 = p1; char *p3 = *p1; printf(“ch : %s\n”, ch); printf(“p1 address [%d] value is %s\n”, p1, […]