在C(GCC)中使用char*

Amm*_*r S -2 c gcc void-pointers

我有以下代码

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


int main()
{
  char *A, B, C, D;
  printf("Enter name A:");
  scanf("%s", &A);


  printf("Enter name B:");
  scanf("%s", &B);

  printf("Enter name C:");
  scanf("%s", &C);

  printf("Enter name D:");
  scanf("%s", &D);

  printf("%s, %s, %s, %s \n", A, B, C, D);    

  return 1;
}
Run Code Online (Sandbox Code Playgroud)

它接受四个字符串,但在打印出来之前会崩溃吗?

我想做的第二件事是将这些字符串(A,B,C,D)传递给接受void指针的函数,我是否必须先将它们转换为void指针?

Iha*_*imi 6

您需要为空间分配A,使用scanf()错误的方式,说明"%s"符不会为目标变量分配空间.

你可以通过声明A为固定大小的数组来分配堆栈中的空间,就像这样

char A[100];
Run Code Online (Sandbox Code Playgroud)

然后

if (scanf("%99s", A) != 1)
 {
    printf("unexpected problem, probably `EOF'\n");
    return -1;
 }
Run Code Online (Sandbox Code Playgroud)

这个

char *A, B, C, D;
Run Code Online (Sandbox Code Playgroud)

不是你显然认为的,*唯一适用于A那里,所以也许你的意思

char *A, *B, *C, *D;
Run Code Online (Sandbox Code Playgroud)

最后一点,"%s"说明符期望一个char *ie char指针,通过使用&你传递的运算符的地址char **是错误的,所以在这种情况下你不需要它.