因此,mid在二进制搜索中计算的正确方法是mid = low + ((high - low) / 2)为了处理溢出错误.
我的实现使用无符号的64位变量,我从来没有看到我的数组变得如此之大以至于导致溢出的情况.我是否仍然需要使用上述实现或我可以使用mid = (low + high) / 2
这里最好的做法是什么?
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *words[] = {"mHello", "kWorld", "kHow", "9Are", "3You?"};
char **parsed = malloc(5);
int i;
for (i = 0; i < 5; i++)
{
int n = strlen(words[i]);
parsed[i] = malloc(n);
strncpy(parsed[i], words[i] + 1, n);
printf("[%s] ", parsed[i]);
}
printf("\n----------------------\n");
for (i = 0; i < 5; i++)
printf("[%s] ", parsed[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
parsed[i]包含words[i]没有第一个字符.
输出是
[Hello] [World] [How] [Are] [You?]
----------------------
[?? o] [World] [How] [Are] [You?]
Run Code Online (Sandbox Code Playgroud)
为什么第一个printf调用parsed[0] …
我正在编写一个返回字符串的first n(n <= strlen(src))字符的函数.
char* substring(char *src, int n)
{
char *substr;
int i;
for (i = 0; i < n; i++)
*substr++ = *src++;
src = src - n;
*substr = '\0';
return substr - n;
}
Run Code Online (Sandbox Code Playgroud)
此函数仅在调用一次时返回正确的答案,但在多次调用时返回Seg Fault.