gpt4 book ai didi

c - 为什么设置断点会使我的代码工作?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:33 26 4
gpt4 key购买 nike

我是 C 的新手,所以我确定我做错了很多,但这让我感到困惑。

我的代码应该从用户那里得到一个标题,并在路由目录中创建一个具有该名称的文件夹。仅当我在 makeFolder() 实现上设置断点时它才有效。出于某种原因,在我单击 continue 之前稍作休息就可以正常工作(我使用的是 Xcode)。

不起作用 我的意思是它正确返回 0 但没有创建文件夹。

这是我第一次尝试使用 C 做任何事情,我只是在尝试学习它。

编辑 非常感谢您的回答和评论。它现在按预期工作,我在此过程中学到了一些东西。你们都是学者和君子。

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>

#define MAX_TITLE_SIZE 256

void setTitle(char* title) {
char *name = malloc (MAX_TITLE_SIZE);
printf("What is the title? ");
fgets(name, MAX_TITLE_SIZE, stdin);

// Remove trailing newline, if there
if(name[strlen(name) - 1] == '\n')
name[strlen(name) - 1] = '\0';

strcpy(title, name);
free(name);
}

// If I set a breakpoint here it works
void makeFolder(char * parent, char * name) {
char *path = malloc (MAX_TITLE_SIZE);

if(parent[0] != '/')
strcat(path, "/");

strcat(path, parent);
strcat(path, "/");
//strcat(path, name);
//strcat(path, "/");
printf("The path is %s\n", path);
mkdir(path, 0777);
free(path);
}

int main (int argc, const char * argv[]) {
char title[MAX_TITLE_SIZE];
setTitle(title);
printf("The title is \'%s\'", title);
makeFolder(title, "Drafts");
return 0;
}

最佳答案

malloc 的变量路径包含垃圾,因为您从未显式地填充它。在调试器中运行此代码可能会导致它意外地看到内存清零,然后意外地给出预期的结果。

你至少应该像这样将 path 的第一个字符设置为初始零:

path[0] = '\0';

否则concat()无法正常工作。

关于c - 为什么设置断点会使我的代码工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4166269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com