使用带字符指针的scanf函数

使用带字符指针的scanf函数,c,scanf,C,Scanf,我已经编写了以下代码 int main(){ char arrays[12]; char *pointers; scanf("%s",arrays); scanf("%s",pointers); printf("%s",arrays); printf("%s",pointers); return 0; } 为什么在我写入'scanf(“%s”,指针)时会出现错误?因为您正在写入内存中尚未初始化的地址。通过未初始化的指针写入内存指针会调用未定义的行为。分

我已经编写了以下代码

int main(){
   char arrays[12];
   char *pointers;
   scanf("%s",arrays);
   scanf("%s",pointers);
   printf("%s",arrays);
   printf("%s",pointers);
   return 0;
}

为什么在我写入'scanf(“%s”,指针)时会出现错误?

因为您正在写入内存中尚未初始化的地址。通过未初始化的指针写入内存指针会调用未定义的行为。分配足够的内存:

pointers = malloc(256);
if(!pointers)
  perror("malloc");
else
  scanf("%255s", pointers);
或者将其声明为静态数组:

char pointers[256];

您也应该考虑使用SCAN For()。p> 如果您对fgets()感兴趣,您可能需要阅读:


指针
是一个统一的指针。你不能在上面写字。您应该分配足够的内存来存储字符串,就像您对
数组所做的那样。有了指针,就可以使用动态分配(参见
malloc
)。

指针的使用不需要初始化,如
int x;printf(“%d\n”,x)。在使用之前,您需要使指针指向某个对象。你在读哪本书?

  • char*指针创建指针变量
  • 指针
    是由
    指针
    指向的
    地址
    ,由不确定 默认
  • *指针
    是由
    指针
    指向的地址中的数据,在分配地址之前无法执行此操作
就这么做吧

char arrays[12];
char *pointers;
pointers = arrays;
scanf("%s",pointers);

你能详细解释一下这个错误吗?我现在还不熟悉编译器

但要使scanf和printf正常工作,您必须在程序的顶部设置以下内容:

#include <stdio.h>
#include <stdlib.h>
#包括
#包括
这两个都是C.IO的标准库。IO包含scanf,我敢肯定printf在同一个库中。但是,在您知道哪些函数需要哪些库之前,为每个程序同时包含两个标准库并没有什么坏处。尽量使用自定义头文件,这样就不需要每个文件都包含大量的头文件

不要忘记内存分配的
malloc
语句

但我不确定你想用你的代码做什么,请详细说明

char *pointers; 
必须初始化。只有将字符串指向某个地址,才能将其扫描到
指针中。计算机需要知道从键盘读取的值存储在哪里

int main(){
   char arrays[12];
   char *pointers= arrays;
   scanf("%s",pointers);
   printf("%s",pointers);
   return 0;
}

“*指针默认指向NULL”这是一个谬误。确定吗?指针不保证为空,它不是静态指针variable@KingsIndian,该编辑中的代码严重损坏。此外,当您为scanf指定%s格式说明符时,它的行为将与fgets不同。@modifiablelvalue修复了拼写错误。我只建议使用fgets()。我并没有说它们是等价的,是相互替代的。如果用户不知道标准函数是如何工作的,我希望用户在使用前阅读手册。@modifiablelvalue-hehe,无论如何,我添加了手册的链接和另一个描述差异的问题:)s/默认为空/默认为不确定/我喜欢你如何给出malloc
的替代方案。这根本不是答案。没有标题甚至不是崩溃的原因