Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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
在firstapp1.exe中的0x6D4DE559(ucrtbased.dll)处引发异常:0xC0000005:访问冲突写入位置0x00000000 我在网上查过了,我只能找到C++的线程,而我使用C,所以我来问,抱歉如果重复了。_C_Memory - Fatal编程技术网

在firstapp1.exe中的0x6D4DE559(ucrtbased.dll)处引发异常:0xC0000005:访问冲突写入位置0x00000000 我在网上查过了,我只能找到C++的线程,而我使用C,所以我来问,抱歉如果重复了。

在firstapp1.exe中的0x6D4DE559(ucrtbased.dll)处引发异常:0xC0000005:访问冲突写入位置0x00000000 我在网上查过了,我只能找到C++的线程,而我使用C,所以我来问,抱歉如果重复了。,c,memory,C,Memory,我还在学习,我在努力理解 我刚刚学习了strcpy和strcmp,但我的大脑根本无法理解为什么下面的代码不起作用 void ifelse(); char nametype[100]; char typeofname[100]; char truth[100]; int main() { char name[100]; int age; printf("\n Print \n"); ifelse(); printf("Enter your name

我还在学习,我在努力理解

我刚刚学习了strcpy和strcmp,但我的大脑根本无法理解为什么下面的代码不起作用

void ifelse();
char nametype[100]; 
char typeofname[100];
char truth[100];

int main() {

    char name[100];
    int age;


    printf("\n Print \n");
    ifelse();
    printf("Enter your name: ");
    fgets(name, 100, stdin);
    printf("Enter your age: ");
    scanf("%d", &age);
    if (age > 50) {
        strcpy(truth[100], "and you are an old person.");
    }
    if (age < 50) {
        strcpy(truth[100], "and you are relatively young.");
    }
    else {
        strcpy(truth[100], "and you're a middle age person with issues...");
    } 

    printf("Hello, your %s is %s, %s", nametype, name, truth);

    return 0;
}

void ifelse() {

    printf("Enter your name type (firstname/lastname): ");
    fgets(typeofname, 100, stdin);
    if (strcmp(typeofname, "firstname") == 0) {
        strcpy(nametype[100], "first name");
    }
    if (strcmp(typeofname, "lastname") == 0) {
        strcpy(nametype[100], "last name");
    }
}
void ifelse();
字符名称类型[100];
字符类型名称[100];
真相[100];
int main(){
字符名[100];
智力年龄;
printf(“\n Print\n”);
ifelse();
printf(“输入您的姓名:”);
fgets(名称,100,标准DIN);
printf(“输入您的年龄:”);
scanf(“%d”和年龄);
如果(年龄>50岁){
strcpy(真理[100],“你是个老人。”);
}
如果(年龄<50岁){
strcpy(真理[100],“你还相对年轻。”);
}
否则{
strcpy(真理[100],“你是一个有问题的中年人……”);
} 
printf(“您好,您的%s是%s,%s”,nametype,name,truth);
返回0;
}
void ifelse(){
printf(“输入您的姓名类型(firstname/lastname):”;
fgets(名称类型,100,标准名称);
if(strcmp(typeofname,“firstname”)==0){
strcpy(名称类型[100],“名字”);
}
if(strcmp(typeofname,“lastname”)==0){
strcpy(名称类型[100],“姓氏”);
}
}
在if和else语句中,我在尝试复制名为“truth”的字符串时出错,我还尝试键入strncpy以防万一,但没有


它应该继续执行底部的print函数,但要么它不会打印变量,要么它会输出一个分配错误,strcpy接受两个指向缓冲区的指针,或者换句话说,数组
truth[100]
不是指向缓冲区的指针,而是数组后面的元素。因此,正确的呼叫应如下所示:

strcpy(truth, "and you are an old person.");
strcpy(nametype, "first name");

对代码中的所有类似调用进行更正

其中是
ifelse()定义的函数?为gcc/clang打开编译器警告
-Wall-Wextra-pedantic
,为VS打开编译器警告
/W3
,在代码编译干净之前不要接受代码,没有警告。这解决了问题,谢谢。如果您可以再次帮助em,那么当我使用您建议的编辑运行完整代码时,会出现另一个问题:控制台:输入您的姓名类型(firstname/lastname):firstname输入您的姓名:Bruce输入您的年龄:18最终打印:您好,您的名字是Bruce,我记得,
fgets
最后用
\n
字符填充提供的缓冲区
typeofname
。因此,将“firstname”与“firstname”进行比较,并返回非零。是否有任何方法可以取消\n?按Enter键时,将编号推到行中。您的代码应该检查字符串中的最后一个输入字符,并在必要时删除
\n