相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果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 malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

strlen是否具有未初始化值的字符串未定义行为?

strlen返回终止空字符前面的字符数.的实现strlen可能是这样的:

size_t strlen(const char * str)
{
    const char *s;
    for (s = str; *s; ++s) {}
    return(s - str);
}
Run Code Online (Sandbox Code Playgroud)

此特定实现取消引用s,其中s可能包含不确定的值.它相当于:

int a;
int* p = &a;
*p;
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果有人这样做(导致strlen输出不正确):

char buffer[10];
buffer[9] = '\0';
strlen(buffer); 
Run Code Online (Sandbox Code Playgroud)

是不确定的行为?

c string strlen

6
推荐指数
1
解决办法
889
查看次数

标签 统计

c ×2

casting ×1

malloc ×1

string ×1

strlen ×1