C 将内存分配给具有精确字符长度的指针
我是c语言的新手,目前正在学习指针,我知道指针指向它所指向的任何东西的内存地址 我的问题是,如何准确分配字符长度的内存,否则将占用50个字节? 让我们假设他们输入了一个标题:饥饿游戏C 将内存分配给具有精确字符长度的指针,c,pointers,memory-management,C,Pointers,Memory Management,我是c语言的新手,目前正在学习指针,我知道指针指向它所指向的任何东西的内存地址 我的问题是,如何准确分配字符长度的内存,否则将占用50个字节? 让我们假设他们输入了一个标题:饥饿游戏 BOOL AddNewDVD(Database* data){ } 您需要有一个缓冲区来知道输入的名称有多长。这是您的标题,最多可填充49个字符。然后计算len,发现它只有6字节长。您分配字符串使其大小正好为+1 当然,您可以将title的内容写入string,即使title是一个50字节长的缓冲区,并且str
BOOL AddNewDVD(Database* data){
}
您需要有一个缓冲区来知道输入的名称有多长。这是您的
标题
,最多可填充49个字符。然后计算len,发现它只有6字节长。您分配字符串
使其大小正好为+1
当然,您可以将
title
的内容写入string
,即使title
是一个50字节长的缓冲区,并且string
只有7字节长-内容的复制以\0
终止字符结束,这保证在string
的容量内。您需要有一个缓冲区来知道输入的名称有多长。这是您的标题
,最多可填充49个字符。然后计算len,发现它只有6字节长。您分配字符串
使其大小正好为+1
当然,您可以将
title
的内容写入string
,即使title
是一个50字节长的缓冲区,并且string
只有7字节长-内容的复制以\0
终止字符结束,这保证在string
的容量内。您需要有一个缓冲区来知道输入的名称有多长。这是您的标题
,最多可填充49个字符。然后计算len,发现它只有6字节长。您分配字符串
使其大小正好为+1
当然,您可以将
title
的内容写入string
,即使title
是一个50字节长的缓冲区,并且string
只有7字节长-内容的复制以\0
终止字符结束,这保证在string
的容量内。您需要有一个缓冲区来知道输入的名称有多长。这是您的标题
,最多可填充49个字符。然后计算len,发现它只有6字节长。您分配字符串
使其大小正好为+1
当然,您可以将
title
的内容写入string
,即使title
是一个50字节长的缓冲区,并且string
只有7字节长-内容的复制以\0
终止字符结束,这保证在string
的容量内。您不能使用scanf
来确定字符串的长度,然后为其分配内存。您需要:
fgets
可能就是您所需要的。考虑下面的代码片段:
#define MAX_STR_LEN (50)
char buf[MAX_STR_LEN] = {0};
char *str, *cPtr;
/* Get User Input */
printf("Enter a string, no longer than %d characters: ", MAX_STR_LEN);
fgets(buf, MAX_STR_LEN, stdin);
/* Remove Newline Character If Present */
cPtr = strstr(buf, "\n");
if(cPtr)
*cPtr = '\0';
/* Allocate Memory For Exact Length Of String */
str = malloc(strlen(buf) + 1);
strncpy(str, buf, strlen(buf));
/* Display Result */
printf("Your string is \"%s\"\n", str);
不能使用
scanf
确定字符串的长度,然后为其分配内存。您需要:
fgets
可能就是您所需要的。考虑下面的代码片段:
#define MAX_STR_LEN (50)
char buf[MAX_STR_LEN] = {0};
char *str, *cPtr;
/* Get User Input */
printf("Enter a string, no longer than %d characters: ", MAX_STR_LEN);
fgets(buf, MAX_STR_LEN, stdin);
/* Remove Newline Character If Present */
cPtr = strstr(buf, "\n");
if(cPtr)
*cPtr = '\0';
/* Allocate Memory For Exact Length Of String */
str = malloc(strlen(buf) + 1);
strncpy(str, buf, strlen(buf));
/* Display Result */
printf("Your string is \"%s\"\n", str);
不能使用
scanf
确定字符串的长度,然后为其分配内存。您需要:
fgets
可能就是您所需要的。考虑下面的代码片段:
#define MAX_STR_LEN (50)
char buf[MAX_STR_LEN] = {0};
char *str, *cPtr;
/* Get User Input */
printf("Enter a string, no longer than %d characters: ", MAX_STR_LEN);
fgets(buf, MAX_STR_LEN, stdin);
/* Remove Newline Character If Present */
cPtr = strstr(buf, "\n");
if(cPtr)
*cPtr = '\0';
/* Allocate Memory For Exact Length Of String */
str = malloc(strlen(buf) + 1);
strncpy(str, buf, strlen(buf));
/* Display Result */
printf("Your string is \"%s\"\n", str);
不能使用
scanf
确定字符串的长度,然后为其分配内存。您需要:
fgets
可能就是您所需要的。考虑下面的代码片段:
#define MAX_STR_LEN (50)
char buf[MAX_STR_LEN] = {0};
char *str, *cPtr;
/* Get User Input */
printf("Enter a string, no longer than %d characters: ", MAX_STR_LEN);
fgets(buf, MAX_STR_LEN, stdin);
/* Remove Newline Character If Present */
cPtr = strstr(buf, "\n");
if(cPtr)
*cPtr = '\0';
/* Allocate Memory For Exact Length Of String */
str = malloc(strlen(buf) + 1);
strncpy(str, buf, strlen(buf));
/* Display Result */
printf("Your string is \"%s\"\n", str);
更好的方法不是将指针视为地址,而是:
- 指向t的指针是一个值
- 将
运算符应用于指向t的指针,会得到一个类型为t的变量*
- 将
运算符应用于类型为t的变量,可以得到指向t的指针&
- 类型为t的变量可以获取或存储类型为t的值
- 数组是一组变量,每个变量由一个索引标识
- 如果指针引用的变量与