字符 * 错误访问错误

标签 c pointers c-strings

我试图掌握指针的概念,但无法掌握它的窍门。为什么此代码将正确的值分配给 s ,但是当我尝试在 t 上使用它时会产生运行时错误。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *s;
    char *t;

    printf("s: ");
    scanf("%s", s);

    printf("t: ");
    scanf("%s", t);

    return 0;
}

最佳答案

您必须为字符指针动态分配内存,否则它将无法工作。未初始化的指针有垃圾。

//a macro to hold the size of the array.

#define DIM 12

char *s = malloc(sizeof(char) * DIM);
char *t = malloc(sizeof(char) * DIM);

printf("s: ");
scanf("%s", s);

printf("t: ");
scanf("%s", t);

使用完内存后,不要忘记从堆中释放内存。

free(t);
free(s);

如果您不想在堆上分配内存,则可以使用 char 数组,在使用 scanf 后无需释放该数组:

char t[DIM];
char s[DIM];

关于字符 * 错误访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42475822/

相关文章:

c - 生成有限制的随机数

c - 使用C从文本文件中删除多个字符

c++ - 在函数 findx() 中是否有替代 const_cast<char*> 的方法?

c - 奇怪的 printf 方程

c++ - CString 到 LPCTSTR 的转换中断了 sql 查询

c++ - 交换 C++ 数组的 2 个字符

c - Valgrind 在每个程序上报告 "Conditional jump or move depends on uninitialised value(s)"

c - 嗨,有人可以帮我解决这个循环吗

c - 使用指针访问数组和通过指针访问非数组变量之间有什么区别

c++ - 是否可以使模板自动将 C 字符串转换为 C++ 字符串对象?