【问题标题】:Segmentation Fault in sub-string C program子字符串 C 程序中的分段错误
【发布时间】:2012-09-12 06:05:58
【问题描述】:

我正在尝试从现有字符串中提取子字符串。但是它抛出了分段错误错误。它在早上执行良好,但我不知道为什么它现在给出分段错误。请有人帮助我。

#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="1017122,1,10,?,1,1";
  char * pch,*pch1;
  FILE *fp;
  char *str1,*str2;
  int noofattr=0;
  int strlen1;

  /*if(remove("abc.txt") != 0)
  perror("The file is successfully deleted.\n");
  else
  printf("Error in deleting the file.\n");
*/

  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str,",");
  while(pch!=NULL)
  {
          if(strcmp(pch,"?")!=0)
          {
                strcat(str1,pch);
                strcat(str1,",");
          }
          else
          {
                strcat(str1,pch);
                strcat(str1,",");
          }
          pch = strtok (NULL,",");
          noofattr++;
  }


  strlen1=strlen(str1);
  //memcpy(str2,&str1,strlen1-1);
//  strncpy(str1,str1+0,strlen1-1);
  printf("\nThe formatted string is %s and its length is %d\n",str1,strlen1);
  printf("\nThe total no. of attributes except SCN are %d\n",noofattr);
  return 0;
}

【问题讨论】:

  • 你试过通过gdb运行它吗?调试器对于解决此类问题绝对是无价的。
  • 不..不知道...是windows调试器吗?
  • 遇到分段错误或任何其他崩溃时,您的第一反应应该是在调试器中运行您的程序。它将帮助您找到崩溃的位置,并让您检查变量以帮助您了解崩溃的原因。

标签: c string segmentation-fault


【解决方案1】:

str1 指向内存中的一个随机位置,您必须(是的,必须)将其设置为一个足够大的缓冲区以保存最终结果,然后再尝试对其进行strcat

【讨论】:

  • 那么我应该使用malloc分配内存吗?
  • 是的,str1=malloc(...); strcpy(str1,""); 之类的东西应该可以解决问题(将... 替换为计算结果长度上限+1 的公式)
【解决方案2】:

你的str1没有分配,当然是段错误。

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多