Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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 如何用空终止符替换新行字符?_C - Fatal编程技术网

C 如何用空终止符替换新行字符?

C 如何用空终止符替换新行字符?,c,C,我的程序是一个任务列表管理器。。。它使用fgets/stdin获取任务的名称、优先级和日期,并将其放入结构中。这是我的程序的相关片段: task *makeTask(char *name, char *date, char *priority) { task *the_task = malloc(sizeof(task)); int i; the_task->task_name = (char*)malloc(sizeof(char)

我的程序是一个任务列表管理器。。。它使用fgets/stdin获取任务的名称、优先级和日期,并将其放入结构中。这是我的程序的相关片段:

task *makeTask(char *name, char *date, char *priority)
{

        task *the_task = malloc(sizeof(task));

        int i;

        the_task->task_name = (char*)malloc(sizeof(char) * (strlen(name)));

         for (i=0;name[i] != '\n'; i++) {
                if (name[i] != '\0')
                the_task->task_name[i] = name[i];
        }

        the_task->task_name[i] = '\0';

        //already allocated for in struct
        for (i=0;date[i] != '\n'; i++) {
                if (date[i] != '\0')
                the_task->date_entered[i] = date[i];
        }

        the_task->date_entered[i] = '\0';


        the_task->priority = atoi(priority);
        return the_task; // FILE THIS IN
}
以下是预期输出:

0: Feed the cats, priority: 5.  Entered 01/01/1111
以下是实际输出:

0: edsats, priority: 5.  Entered 01/01/1111

在过去的一个小时里,我一直在挠头试图解决这个问题。。。我的代码是怎么回事?

我想提出几点建议:

  • 您需要一个额外的字节来存储任务名称,以保存空终止符
  • 使用
    strdup
    为字符串分配内存并将其复制到字符串中(用于任务名称)
  • 使用
    strcpy
    将日期复制到其预分配的字符串中
我还不确定您是否正在向我们展示导致问题的代码,但请尝试修复任务名称内存块,看看这是否有帮助

  • 您不为输入的任务->日期分配空间

  • 您需要添加
    strlen(name)+1
    字节来解释空终止符


  • 嗯,我的眼睛<代码>(char*)malloc(…和
    sizeof(char)
    …哈,老实说,我是清白的。我的助教说我需要在未来二十年对我的代码进行未来验证。=/这不是未来验证。相反,这会降低代码的可维护性和更容易出错。
    malloc(sizeof(char)*(strlen
    。意识到您没有足够的空间来存储空指针。R抱怨是因为
    sizeof(char)
    保证为1。此外,我可能会编写
    sizeof(任务->任务名称[0])
    如果我担心将来的打样。非常好的建议,lxop。代码现在更干净,功能正常。非常感谢。