在这个问题,有人建议意见,我应该不会投的结果malloc,即
int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
而不是:
int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
我正在使用C和C++程序.我们曾经在没有make-strings-writable选项的情况下进行编译.但是这得到了一堆警告,所以我把它关掉了.
然后我得到了一堆形式的错误"无法将const char*转换为函数foo的argmuent 3中的char*".所以,我经历了很多修改来解决这些问题.
然而,今天,程序崩溃,因为文字""被传递到一个期待char*的函数,并将第0个字符设置为0.它没有做任何坏事,只是试图编辑一个常量,并且崩溃.
我的问题是,为什么不是编译器错误?
如果它很重要,这是在使用gcc-4.0编译的mac上.
编辑:添加代码:
char * host = FindArgDefault("EMailLinkHost", "");
stripCRLF(linkHost, '\n');
Run Code Online (Sandbox Code Playgroud)
哪里:
char *FindArgDefault(char *argName, char *defVal)
{// simplified
char * val = defVal;
return(val);
}
Run Code Online (Sandbox Code Playgroud)
和
void stripCRLF(char *str, char delim)
{
char *p, *q;
for (p = q = str; *p; ++p) {
if (*p == 0xd || *p == 0xa) {
if (p[1] == (*p ^ 7)) ++p;
if (delim == -1) *p = delim;
}
*q++ = *p;
}
*q = …Run Code Online (Sandbox Code Playgroud)