我试图掌握指针的概念,但无法掌握它的窍门。为什么此代码将正确的值分配给 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/