我目前正在编写一个程序,它从一个充满标点符号和其他字符的字符串中返回单词的“列表”;即删除标点符号。例如:
("'hello 00095there =--0world.22")
应该返回:
hello
there
world
但是在目前这一点,我的代码(对于有问题的字符串)返回:
hello
there
world
segmentation fault (core dump)
从技术上来说,它正在返回正确的答案,但接下来是分段错误,我不确定为什么会这样。
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char** wordList(const char* s) {
int count;
int pree = strlen(s);
char *first = malloc(pree * sizeof(double));
char *last = malloc(1 * sizeof (double));
int w = 0;
int saad = 0;
int oo = 0;
for (int u = 0; u != pree; u++){
first[oo] = s[oo];
oo++;
}
for (int i = 0; i != pree; i++){
if( (first[i]>='a'&& first[i]<='z') || (first[i]>='A' && first[i]<='Z')|| (first[i] ==' ')){
last[w] = first[i];
w++;
count++;
}
}
int strange = strlen(last);
int dude_no_p = pree - strange;
for (int pp = 0; pp != pree-dude_no_p; pp++){
if (last[saad] == ' '){
printf("\n");
saad++;
}
else{
printf("%c", last[saad]);
saad++;
}
}
printf("\n");
return 0;
}
int main (void) {
char** words = wordList("'hello 00095there =--0world.22");
int i = 0;
while (words[i] != NULL) {
printf("%s\n", words[i]);
free(words[i]); // We're done with that word
i++;
}
free(words); // We're done with the list
}
当我正在研究这个计算机科学项目时,我无法改变主要区域内的任何内容,所以我发现解决这个问题相当困难。