Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中输入char*?_C_Arrays_Input_Char_Scanf - Fatal编程技术网

如何在C中输入char*?

如何在C中输入char*?,c,arrays,input,char,scanf,C,Arrays,Input,Char,Scanf,我想为char*做一个简单的输入。为什么这不起作用? 它给我带来了一个我无法解决的异常 #include "stdafx.h" #include "stdio.h" #include "stdlib.h" char* GetCharSeq() { char *s = (char*)malloc(100); scanf_s("%s", s); return s; } int main() { char* charseq; charseq = Get

我想为char*做一个简单的输入。为什么这不起作用? 它给我带来了一个我无法解决的异常

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

char* GetCharSeq()
{
    char *s = (char*)malloc(100);

    scanf_s("%s", s);

    return s;
}

int main()
{
    char* charseq;

    charseq = GetCharSeq();

    return 0;
}
代码中有未定义的行为。您之所以拥有它,是因为您为函数提供了很少的参数

对于每个字符串参数,不仅需要提供目标字符串,还需要提供字符串的大小。所以把你的电话改成

scanf_s("%s", s, 100);
代码中有未定义的行为。您之所以拥有它,是因为您为函数提供了很少的参数

对于每个字符串参数,不仅需要提供目标字符串,还需要提供字符串的大小。所以把你的电话改成

scanf_s("%s", s, 100);
修改您的代码

char* GetCharSeq()
{
    char *s = (char*)malloc(100);

    gets(s);

    return s;
}
这将起作用。

修改您的代码

char* GetCharSeq()
{
    char *s = (char*)malloc(100);

    gets(s);

    return s;
}


这将起作用。

与您的问题无关,但对于系统头文件,您应该使用尖括号,例如
#include
,在C语言中使用。如果您遇到异常,也可以发布异常,您应该始终检查返回代码(例如
scanf_
)。什么是真正的异常?@JoachimPileborg这可能不是他的异常的真正问题。铸造也不会造成伤害。@Anishharma铸造也会造成伤害,这就是问题所在。阅读已接受答案中的第二点。这肯定不是问题的根源,因为我已经添加了一个答案(也请注意注释中关于它与问题无关的起始免责声明)。与您的问题无关,但对于系统头文件,您应该使用尖括号,例如
#include
,在C中使用you。如果您遇到异常,张贴也很有意义。您应该始终检查返回代码(例如,
scanf\u
)。什么是真正的异常?@JoachimPileborg这可能不是他的异常的真正问题。铸造也不会造成伤害。@Anishharma铸造也会造成伤害,这就是问题所在。阅读已接受答案中的第二点。这肯定不是问题的根源,因为我已经添加了一个答案(还要注意注释中关于它与问题无关的起始免责声明)。它如何编译/链接不匹配的参数列表?@MartinJames出于同样的原因
printf(“%s”)
将编译并链接。@MartinJames,因为原型中的
意味着参数数量可变,而编译器无法知道确切数量。一些编译器可以通过解析格式字符串来解决问题,并会针对此类问题发出警告,但这只是一个警告,在技术上是合法的C。
scanf_s()
只能在PC上编译。他应该使用
fgets()
因为它是他想要接收的单个字符串。它如何编译/链接不匹配的参数列表?@MartinJames出于同样的原因
printf(“%s”)
将编译并链接。@MartinJames,因为原型中的
意味着参数数量可变,而编译器无法知道确切数量。一些编译器可以通过解析格式字符串来解决问题,并会对此类问题发出警告,但这只是一个警告,在技术上是合法的。C
scanf_s()
只能在PC上编译。他应该使用
fgets()
,因为这是他想要接收的单个字符串。如果输入的字符不超过99个,它就可以工作,但正是因为这个原因才是不安全的!我们可以将
malloc()
参数的值更改为我们想要的任何数字。这样不行吗?如果您输入的字符不超过99个,它将起作用,但正是因为这个原因,它是不安全的!我们可以将
malloc()
参数的值更改为我们想要的任何数字。那不行吗?