新手 C 程序员在使用字符串和 malloc 时遇到麻烦

Novice C programmer having trouble with strings & malloc

我刚开始学习 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));
}

在原始程序中,失败是在尝试将字符串复制到分配的指针后,我假设这是由于内存不足(如有必要将显示代码)。 我觉得我错过了一些基本的东西,因此非常感谢任何反馈。 如果有人能指出我的错误,我将不胜感激。谢谢!

  • scanf("%s",&DummyString); 是错误的。由于 DummyString 是一个数组,当您在表达式中使用它时,您会得到一个指向其第一个元素的指针,而这正是 scanf 所期望的。改为 scanf("%s",DummyString);.
  • malloc 行不必要地臃肿,简单地做
    char *DummyStringPtr = malloc(strlen(DummyString)+1));
  • 无论指向何处,指针的大小始终为 4(或 8 等)。 sizeof不会告诉你分配了多少内存。如果需要,您必须自己跟踪,在单独的大小变量中。
  • sizeof 结果的正确 printf 转换说明符是 %zu,因为 sizeof returns 类型 size_t。新手的快速和肮脏的版本是使用 printf("%d", (int)sizeof(something));
  • 总是free(DummyStringPtr);.