我得到一个分段错误
所以在顶部我有 typedef char * string;
然后我只有一个名为空格的变量,设置为 5 左右
for(i=0; i<=spaces; i++) {
sepwords[i] = malloc(3000);
}
str 是一个字符数组,我正在寻找空格并复制到那时
while(str[i]!=' ') {
printf("%d\n", i);
strcpy(sepwords[i], "hello");
i++;
}
所以这实际上有效
但是,如果我这样做
while(str[i]!=' ') {
char *temp[100];
*temp=str[i];
printf("%d\n", i);
strcpy(sepwords[i], *temp);
i++;
}
它在这方面存在缺陷
我不认为这是因为我使用的是 typedef 字符串,因为我事先分配了内存。
有任何想法吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 256
char *progn;
void usage(void) {
fprintf(stderr, "Usage: %s pattern\n", progn);
}
typedef char * string;
int pattern_match(char *pattern, char *str) {
int i=0;
int spaces=0;
while(str[i]!=0) {
if(str[i]==' ') {
spaces++;
}
i++;
}
string sepwords[spaces];
for(i=0; i<=spaces; i++) {
sepwords[i] = malloc(3000);
}
i=0;
while(str[i]!=' ') {
char *temp[100];
*temp=str[i];
printf("%d\n", i);
strcpy(sepwords[i], temp);
i++;
}
//printf("%d\n", spaces);
//strs[0]="hiya boy";
//printf(strs[1]);
}
int main(int argc, char **argv) {
char line[MAXLINE];
char *pattern;
progn = argv[0];
if (argc != 2) {
usage();
return EXIT_FAILURE;
}
pattern = argv[1];
while (!feof(stdin) && !ferror(stdin)) {
if (!fgets(line, sizeof (line), stdin)) {
break;
}
if (pattern_match(pattern, line)) {
printf("%s", line);
}
}
if (ferror(stdin)) {
perror(progn);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}