总线错误 运行 C 中的一个程序
Bus error running a program in C
我正在尝试编译我用 C 编写的程序,但是 无法在 运行 程序时摆脱 'bus error'。 我来了在提到 'string literals' 和内存问题的其他线程中,但我认为是时候要求重新审视我的代码了。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
统计字数:
int count(char *str)
{
int i = 0;
int k = 0;
while (str[i])
{
if (str[i] != ' ')
{
while (str[i] != ' ')
i++;
k++;
}
else
i++;
}
return (k);
}
提取单词:
void extract(char *src, char **dest, int i, int k)
{
char *tabw;
int j = 0;
while (src[i + j] != ' ')
j++;
tabw = (char*)malloc(sizeof(char) * j + 1);
j = 0;
while (src[i + j] != ' ')
{
tabw[j] = src[i + j];
j++;
}
tabw[j] = '[=13=]';
dest[k] = &tabw[0];
return;
}
将字符串拆分为单词:
char **split(char *str)
{
int i = 0;
int k = 0;
char **dest;
dest = (char**)malloc(sizeof(*dest) * count(str) + 1);
while (str[i] != '[=14=]')
{
while (str[i] == ' ')
i++;
if (str[i] != ' ')
extract(str, dest, i, k++);
while (str[i] != ' ')
i++;
}
dest[k] = 0;
return (dest);
}
正在打印:
void ft_putchar(char c)
{
write(1, &c, 1);
}
void print(char **tab)
{
int i = 0;
int j;
while (tab[i])
{
j = 0;
while (tab[i][j])
{
ft_putchar(tab[i][j]);
j++;
}
ft_putchar('\n');
i++;
}
}
int main()
{
print(split(" okay blue over"));
}
你们有什么想法吗?谢谢!
如果没有遇到 space(例如,在行尾),count
中的 while (str[i] != ' ')
超出字符串结尾。我看到你在多个地方犯了这个错误(在 extract
和 split
中):你假设你会看到 space,但这不一定是真的。例如,您在 main
中传递的字符串的最后一个单词后面没有跟 space.
使用:while (str[i] != ' ' && str[i] != 0 )
我正在尝试编译我用 C 编写的程序,但是 无法在 运行 程序时摆脱 'bus error'。 我来了在提到 'string literals' 和内存问题的其他线程中,但我认为是时候要求重新审视我的代码了。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
统计字数:
int count(char *str)
{
int i = 0;
int k = 0;
while (str[i])
{
if (str[i] != ' ')
{
while (str[i] != ' ')
i++;
k++;
}
else
i++;
}
return (k);
}
提取单词:
void extract(char *src, char **dest, int i, int k)
{
char *tabw;
int j = 0;
while (src[i + j] != ' ')
j++;
tabw = (char*)malloc(sizeof(char) * j + 1);
j = 0;
while (src[i + j] != ' ')
{
tabw[j] = src[i + j];
j++;
}
tabw[j] = '[=13=]';
dest[k] = &tabw[0];
return;
}
将字符串拆分为单词:
char **split(char *str)
{
int i = 0;
int k = 0;
char **dest;
dest = (char**)malloc(sizeof(*dest) * count(str) + 1);
while (str[i] != '[=14=]')
{
while (str[i] == ' ')
i++;
if (str[i] != ' ')
extract(str, dest, i, k++);
while (str[i] != ' ')
i++;
}
dest[k] = 0;
return (dest);
}
正在打印:
void ft_putchar(char c)
{
write(1, &c, 1);
}
void print(char **tab)
{
int i = 0;
int j;
while (tab[i])
{
j = 0;
while (tab[i][j])
{
ft_putchar(tab[i][j]);
j++;
}
ft_putchar('\n');
i++;
}
}
int main()
{
print(split(" okay blue over"));
}
你们有什么想法吗?谢谢!
count
中的 while (str[i] != ' ')
超出字符串结尾。我看到你在多个地方犯了这个错误(在 extract
和 split
中):你假设你会看到 space,但这不一定是真的。例如,您在 main
中传递的字符串的最后一个单词后面没有跟 space.
使用:while (str[i] != ' ' && str[i] != 0 )