我是编程新手,我刚刚开始学习C。
我们每周都有"实验室"我们有90分钟完成给定的任务,到目前为止每周我都得到相同的错误"抛出异常:读取访问冲突。"我的问题是,这是什么意思?我似乎无法弄清楚它究竟意味着什么以及如何解决它。每周我都会花费一半的时间来试图弄清楚什么是错的。如果有人向我解释当我收到此错误时该做什么/该寻找什么,我将非常感激。
一旦错误消失,我修复了我的代码后,一些指针/地址的传递(不确定哪一个,但它是错误的)。当我修复它时,错误消失了。
另一次错误消失后,我注意到我的一个循环没有停在应该停在哪里它只是非常高的数字(不,不是永远,我不知道为什么)。当我修复循环时,错误消失了。
我希望我明白我要问的是什么,但我会包括我当前的问题,但我认为没有必要去看。在此先感谢您的帮助!
这次我试着在家里写一个任务,我又一次犯了同样的错误,但我还没弄明白什么是错的。任务是:
写功能:
int find_next_word(const char * string,int startIndex,int * end);
将搜索字符串中的第一个单词,从 startIndex 开始, 返回其第一个字符的索引。一个词是非空的序列 字母数字字符,由其他非字母数字包围 字符串,字符串的开头或结尾(使用函数 is_alphanumeric 来分类字符)。功能也应该搜索 对于单词后面的第一个字符(可能是空终止 字符)并将其索引存储在 end 指向的变量中。
is_alphanumeric 是我编写的前一个任务的函数,包含在代码中;它有效。
#include <stdio.h>
#include <stdlib.h>
int is_alfanumeric(char c);
int find_next_word(const char* str, int start, int* end);
void main(void)
{
/********Part 1********/
puts("********Part 1********");
char c = (char)getchar();
if (is_alfanumeric(c))
printf("%c is a letter or a number\n", c);
else
printf("%c is neither a letter nor a number\n", c);
/********Part 2********/
puts("********Part 2********\n");
char str[] = " ThhHhis is MmmMy,\t tTesttt string \t \n";
printf("Original string:\n[%s]\n", str);
int end;
int start = find_next_word(str, 0, &end);
printf("First word start: %d, end: %d\n", start, end);
start = find_next_word(str, end, &end);
printf("Second word start: %d, end: %d\n", start, end);
system("pause");
}
int is_alfanumeric(char c) {
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
return 1;
else
return 0;
}
int find_next_word(const char* str, int start, int* end) {
int i = start;
for (; is_alfanumeric(str[i]); i++);
for (; !is_alfanumeric(str[i]) && str[i] != '\0'; i++);
return i;
for (; is_alfanumeric(str[i]); i++);
*end = i;
}
答案 0 :(得分:0)
你的循环已经超越了自己。在第一个循环中,直接运行到最后 char数组。 (Remmember,C没有“字符串”,它有字符数组。)然后,在你的 第二个循环,你得到一个访问冲突,因为你试图索引超过数组的末尾。试试这个:
int find_next_word(const char *str, int start, int *end) {
int i = start;
int r = 0;
for (; str[i] != '\0'; i++) {
/* You want the FIRST character that satisfies the conditions */
if (is_alfanumeric(str[i]) {
r = i;
break;
}
}
if (r > start) {
/* If r is greater than start, you know you found a character
before the end of the array, so now you can increment
your cursor until you find a non-alfanumeric character,
or you run out of array. */
for (; !is_alfanumeric(str[i]); i++);
}
*end = i;
return r;
}