分段故障

时间:2015-09-05 03:44:48

标签: c segmentation-fault

我刚刚创建了一个程序,它会在缓冲区中找到一个命令。问题是我在代码启动时立即遇到分段错误。我甚至尝试在main的开头放置一个print语句,但它仍然没有显示任何内容。

#include <stdio.h>
#include <stdlib.h>

void convertToUpperCase(char str[], int _size)
{
   int i = 0;
   while(i < _size)
   {
      str[i] = toupper(str[i]);
      i++;
   }
}

int CheckText(char command[],
              char buffer[],
              int starting_point,
              int size_of_buffer,
              int size_of_command)
{
   printf("%s", buffer);
   size_of_command--;
   convertToUpperCase(buffer, size_of_buffer);
   convertToUpperCase(command, size_of_command);

   int i = 0;
   int r = 0;
   while(i < size_of_command)
   {
      if(buffer[i+starting_point] == command[i])
      {
         r++;
         printf("%d", r);
      }
      i++;
   }

   int flag = 0;
   if(r == size_of_command)
   {
      flag = 1;
   }

   return flag;
}

int main()
{
   char h[40] = "hello";
   int fla;
   printf("hey1");
   fla=CheckText("hello", h,0,40,6);
   if(fla == 1)
   {
      printf("command recognized ");
   }
   //printf("%s\n", h);

   return 0;
}

1 个答案:

答案 0 :(得分:0)

正如@BLUEPIXY指出的那样,使用

CheckText("hello", h,0,40,6);

CheckText修改其参数时会导致未定义的行为,因为"hello"被放置在代码的只读部分中。使用类似的东西:

char h[40] = "hello";
char h2[40] = "hello";
int fla;
printf("hey1");
fla=CheckText(h2, h,0,40,6);