Scanf字符串和set指针

Scanf字符串和set指针,c,pointers,scanf,C,Pointers,Scanf,我要扫描字符串并设置指向他的指针。字符串输入每次都不同,所以我不能像字符输入[20]那样设置。到目前为止没有成功 int main(void) { char input; char *input_string = input; scanf("%s", &input_string); int i = 0; while (input_string[i] != '\0') { printf('%d', input_string[i])

我要扫描字符串并设置指向他的指针。字符串输入每次都不同,所以我不能像
字符输入[20]
那样设置。到目前为止没有成功

int main(void) {
    char input;
    char *input_string = input;
    scanf("%s", &input_string);

    int i = 0; 
    while (input_string[i] != '\0') {
        printf('%d', input_string[i]);
        i++;
    }
}

在POSIX系统上,可以使用
m
修饰符为字符串自动分配内存

char *input_string;
scanf("%ms", &input_string);

请注意,为了避免内存泄漏,最终需要调用
free(input_string)以释放分配的内存。

恐怕您需要一本好的C语言书并通读一遍。这段代码错误的地方比正确的地方多。这段代码不应该编译。您需要为数据分配内存。它不需要是确切的数量,它应该是最大可能。您还应该在
scanf
调用中定义该最大值。使用指针,相关的副本是节省时间,启用所有编译器警告。可能会收到诸如“警告:初始化从整数生成指针而不进行强制转换[-Wint转换]”、“警告:格式“%s”要求参数类型为“char*”,但参数2的类型为“char**”[-Wformat=]”、“警告:多字符字符常量[-Wmultichar]”等输出,“警告:传递'printf'的参数1将指针从整数转换为不带强制转换[-Wint转换]”。此反馈比在堆栈溢出上发布快得多。
char*input\u string=input;
是错误的。
input\u string
是指针,但
input
是字符,您无法分配它们。