我正在从get_string库中试用CS50。get_string函数,似乎会导致分割错误。你有什么建议吗?
#include <cs50.h>
#include <stdio.h>
int main (void) {
string answer = get_string("What's your name? ");
printf("Hello, %s", answer);
}发布于 2021-03-11 05:34:11
好吧,经过一番挖掘,我想我找到了凶手。显然这不是我们找过的地方。
Mac显然有一个名为get_string的内置符号,这就是它在没有库的情况下编译的原因,也是它不断崩溃的原因。
解决这个问题可能有几种方法。
将cs50.c编译成二进制文件
该方法已被提到这里。我还没有测试过它,但据报道它是有效的。
像这样编译代码:
clang -ggdb3 -O0 -std=c99 hello.c ../../../github.com/cs50/lib50-c/src/cs50.c -o hello其中,../../../github.com/cs50/lib50-c/src/cs50.c是cs50.c文件的路径,该路径位于子目录src of cs50库源代码中--如果它在计算机上不同,请使用正确的路径。
您还可以使用hello.c将hello.c文件复制到目录中,只需指定没有路径的cs50.c。
请注意,您必须在后面指定此文件,否则将无法工作!
事实上,在这种情况下,这就足够了:
cc hello.c cs50.c -std=c99 -o hello从现在开始,每次编译代码时,您都需要在cs50.c 之后包含。
重命名函数
因为我没有Mac,所以我不能测试任何东西,所以我会列出一种可以肯定工作的方法--将函数get_string重命名为get_string2。这不是一个很好的解决方案,但我现在只能给你这么多。
如果第一种方法不起作用,请使用此方法。
sudo make uninstall卸载它cs50.h打开文件srcget_string替换为get_string2 (我在108号线上有一个,109号线上有两个)cs50.c打开文件srcget_string2替换所有出现的get_string2(有很多)make clean
make
sudo make installhello.c转到目录hello.c并用get_string2替换get_stringcc hello.c -lcs50 -o hello编译,用./hello运行您还可能需要在编译和执行之前发出以下命令:
export LIBRARY_PATH=/usr/local/lib
export C_INCLUDE_PATH=/usr/local/include
export LD_LIBRARY_PATH=/usr/local/libget_string的每次使用更改为get_string2。或者,您可以在程序的开头放置这样的内容:
#ifndef get_string2
#define get_string2 get_string
#endif...this意味着,对于运行您的代码的其他人(并且没有宏get_string2),这将定义get_string2与get_string相同,因此您的代码将同时处理修改后的库和未修改的库。
同样,这显然不是最好的方法,但由于我不能测试它,这是我能想到的最好的方法。抱歉的。
如果有人提出更好的办法-那就太好了
https://stackoverflow.com/questions/66570904
复制相似问题