很抱歉,如果这是一个非常菜鸟的问题,我是C语言的初学者,并且在理解指针和其他概念方面遇到了很大的麻烦,这使它非常困难。出现细分错误,我不知道为什么需要帮助。我认为可能是由于使用数组来存储。另外,如果您可以推荐调试器,则将非常有帮助。预先感谢。
#include <stdio.h>
#include <string.h>
char *lineaccept(char *buf, size_t sz){ //Getting inputs using fgets() and storing it in buf.
if(fgets(buf,sz,stdin)==NULL){
printf("ERROR\n");
return NULL;
}
if(strlen(buf) == 1) {
printf("ERROR\n");
return NULL;
}
return buf;
}
void delimitLine(char *buf, char *delimited[], size_t max){ //Taking the string from buf and getting each individual word to store in split[]
if(buf != NULL){
const char s[2] = " ";
char *token;
token = strtok(buf, s);
int counter = 0;
while( token != NULL && counter <= max){
split[counter] = token;
token = strtok(NULL, s);
counter ++;
}
for(int y = 0; y < counter; y++){
if(split[y]==NULL){
break;
}else{
printf("%s\n",split[y]);
}
}
}
}
int main(void) {
const int maxWords = 10;
char maxLenInput[11];
char *arrOfWords[100];
char inputFromLine[100];
while(strcmp((strcpy(inputFromLine,lineaccept(maxLenInput, maxWords))), "")>0) {
delimitline(inputFromLine, arrOfWords, maxWords);
}
return 0;
}
答案 0 :(得分:0)
如果您在控制台中仅按Enter键(未在“ Enter”之前键入任何其他字符),则代码的以下部分将返回NULL
。这是因为fgets
将新行存储为buf
中的唯一字符,这样strlen(buf)
将是1
,然后:
char *read_line(char *buf, size_t sz){
....
if (fgets(buf,sz,stdin)) {
if(strlen(buf) == 1) {
return NULL;
...
然后,您将通话结果传递给read_line
到strcpy
,就像您一样
strcpy(inputFromLine,read_line(maxLenInput, maxWords)
然后您实际上将NULL
传递给strcpy
并由此访问“无效”内存;不确定的行为,可能是段错误。