C - Prog崩溃执行

时间:2015-08-08 19:48:52

标签: c

我的程序在显示" Quel est ce mot?"之后崩溃了? :
我怎么能发声,怎么解决这个问题?
期待你的评论:)
感谢您的帮助!

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   main.c                                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: wjean-ma <marvin@42.fr>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2015/08/03 03:07:53 by wjean-ma          #+#    #+#             */
/*   Updated: 2015/08/08 21:43:49 by wjean-ma         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "include/libft.h"

char    *ft_putword(char **client, char *str)
{
    int i;

    i = 0;
    while (str[i])
    {
        if ((*client)[i] != str[i])
            (*client)[i] = '*';
        else
            (*client)[i] = str[i];
        i++;
    }
    return (*client);
}

int     main(void)
{
    char    *to_find;
    char    *client;
    int     size;
    int     buffer;

    to_find     = "Violet";
    size        = ft_strlen(to_find) + 1;
    if ((client = (char *)malloc(sizeof(char) * (size))) == NULL)
        return (-1);

    client = "******";
    while (ft_strcmp(client, to_find) != 0)
    {
        ft_putstr("Quel est ce mot: ");
        ft_putstr(ft_putword(&client, to_find));
        ft_putstr("\n> ");
        scanf("%s", client);
        while ((buffer = getchar()) != '\n')
            ;
        ft_putstr(ft_putword(&client, to_find));
        ft_putchar('\n');
    }
    ft_putstr("Done\n");
    free(client);
    return (0);
}

/ * --------------------------------------------- -------------------- * /

1 个答案:

答案 0 :(得分:0)

此语句:client = "******";client设置为字符串文字的地址,编译器将其放入只读内存中。然后,当您尝试使用scanf("%s", client);更改此内存时,将导致崩溃。

您可以将客户端初始化为类似于char client[] = "******";的数组,以便编译器将其放入可写内存段。