【发布时间】:2020-07-26 23:08:09
【问题描述】:
我从 C 编程开始,目前正在研究结构并使用指针来处理它们。我一直在尝试编写一个简单的程序来存储您的个人详细信息(姓名和生日)以供练习,但是我在内存分配方面遇到了问题,而且我显然遗漏了一些东西 - 所以我尝试了一些更简单的方法,显然我'在为字符串分配内存时遇到问题。我已经尽力调试这个,但我不知道出了什么问题。
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#include<string.h>
int main()
{
char DummyString[100];
printf("Enter a string to be read back to you: ");
scanf("%s",&DummyString);
printf("The string is: %s\n",DummyString);
printf("String length is %d\n",strlen(DummyString));
printf("sizeof char is %i\n",sizeof(char*));
// char DumbStringPtr=&DumbString;
char *DummyStringPtr = (char*)malloc((sizeof(char))*(strlen(DummyString)+1)); // returns 8 regardless of anything
printf("The size of the pointer would be %d\n", sizeof(DummyStringPtr));
}
在原始程序中,失败是在尝试将字符串复制到分配的指针之后,我假设这是由于内存不足(必要时将显示代码)。 我觉得我错过了一些基本的东西,所以很感激任何反馈。 如果有人能指导我解决我的错误,我将不胜感激。谢谢!
【问题讨论】:
-
这个问题我不清楚。 "// 不管什么都返回 8" 是什么意思?返回 8 是什么?
malloc?strlen -
scanf("%s",&DummyString);其中DummyString已经是一个指针(数组/指针转换),所以在DummyString之前没有'&'... 如果没有检查退货。 (当晚最重要的一课) -
这一行:
printf("sizeof char is %i\n",sizeof(char*));很奇怪。打印出来的文字是 sizeof char,但你使用 sizeof char pointer。请注意,sizeof(char)始终为 1 -
您好,感谢您的意见!我的意图是尝试跟踪我分配了多少内存,但我只是返回了指针的大小。其余的(比如 sizeof(char) 是疯狂的调试尝试:)
-
关于:
scanf("%s",&DummyString);1) '裸' 数组名称降级为数组第一个字节的地址。在数组名称前放置&会导致编译器输出警告消息,这不是您想要的。 2) 当使用“输入格式转换”说明符%s和/或%[...]时,总是包含比输入缓冲区长度小1 的MAX CHARACTERS 修饰符,因为这些说明符总是将NUL 字节附加到输入。这也避免了缓冲区溢出和随之而来的未定义行为(续)
标签: c pointers malloc strcpy strlen