首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取分割故障: 11,关于get_string

获取分割故障: 11,关于get_string
EN

Stack Overflow用户
提问于 2021-03-10 18:40:08
回答 1查看 207关注 0票数 0

我正在从get_string库中试用CS50。get_string函数,似乎会导致分割错误。你有什么建议吗?

代码语言:javascript
复制
#include <cs50.h>
#include <stdio.h>
int main (void) {
    string answer = get_string("What's your name? ");
    printf("Hello, %s", answer);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-11 05:34:11

好吧,经过一番挖掘,我想我找到了凶手。显然这不是我们找过的地方。

Mac显然有一个名为get_string的内置符号,这就是它在没有库的情况下编译的原因,也是它不断崩溃的原因。

解决这个问题可能有几种方法。

cs50.c编译成二进制文件

该方法已被提到这里。我还没有测试过它,但据报道它是有效的。

像这样编译代码:

代码语言:javascript
复制
clang -ggdb3 -O0 -std=c99 hello.c ../../../github.com/cs50/lib50-c/src/cs50.c -o hello

其中,../../../github.com/cs50/lib50-c/src/cs50.ccs50.c文件的路径,该路径位于子目录src of cs50库源代码中--如果它在计算机上不同,请使用正确的路径。

您还可以使用hello.chello.c文件复制到目录中,只需指定没有路径的cs50.c

请注意,您必须在后面指定此文件,否则将无法工作!

事实上,在这种情况下,这就足够了:

代码语言:javascript
复制
cc hello.c cs50.c -std=c99 -o hello

从现在开始,每次编译代码时,您都需要在cs50.c 之后包含

重命名函数

因为我没有Mac,所以我不能测试任何东西,所以我会列出一种可以肯定工作的方法--将函数get_string重命名为get_string2。这不是一个很好的解决方案,但我现在只能给你这么多。

如果第一种方法不起作用,请使用此方法。

  1. 转到安装cs50的目录
  2. 通过发出命令sudo make uninstall卸载它
  3. 在任何文本编辑器中从子目录cs50.h打开文件src
  4. 搜索并将所有出现的get_string替换为get_string2 (我在108号线上有一个,109号线上有两个)
  5. 保存并关闭文件
  6. 在任何文本编辑器中从子目录cs50.c打开文件src
  7. 搜索并用get_string2替换所有出现的get_string2(有很多)
  8. 保存并关闭文件
  9. 返回到原始的cs50构建目录并运行命令:
代码语言:javascript
复制
make clean
make 
sudo make install
  1. 使用hello.c转到目录
  2. 编辑hello.c并用get_string2替换get_string
  3. cc hello.c -lcs50 -o hello编译,用./hello运行

您还可能需要在编译和执行之前发出以下命令:

代码语言:javascript
复制
export LIBRARY_PATH=/usr/local/lib
export C_INCLUDE_PATH=/usr/local/include
export LD_LIBRARY_PATH=/usr/local/lib
  1. 从现在开始,您需要将代码中get_string的每次使用更改为get_string2
  2. 提交代码时不要忘记更改代码。

或者,您可以在程序的开头放置这样的内容:

代码语言:javascript
复制
#ifndef get_string2
#define get_string2 get_string
#endif

...this意味着,对于运行您的代码的其他人(并且没有宏get_string2),这将定义get_string2get_string相同,因此您的代码将同时处理修改后的库和未修改的库。

同样,这显然不是最好的方法,但由于我不能测试它,这是我能想到的最好的方法。抱歉的。

如果有人提出更好的办法-那就太好了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66570904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档