【问题标题】:I don't understand how I am getting segmentation fault [closed]我不明白我是如何得到分段错误的[关闭]
【发布时间】:2016-03-16 16:12:11
【问题描述】:

当我尝试打印文件的每个字符时,出现分段错误。我不明白为什么。

void parseStringAndDelete(char *file)
{
// I a passing "drwxr-xr-x 1 ftp ftp              0 Mar 07 12:34 A_Folder"
// as an argument for the function
 int i = 0;
 int k = 0;
 int len = strlen(file);
 int startIndex = 0;

 //printf("%s\n", file);
 //printf("%d\n", len);
 if(file[0] == 'd')
  {
      for(i = 0; i<len; i++)
      {
        printf("%s\n", file[i]);
      }
  }

}

【问题讨论】:

  • 我发现了错误。对于 printf("%c\n", file[i]) 而不是 printf("%s\n", file[i])。我相信是因为我逐个字符地打印,而不仅仅是一个字符串。
  • 启用编译器警告并观察它们。
  • 完全正确:%s 用于打印字符串,%c 用于打印字符。您应该首先学习使用调试器,这样至少您会找到崩溃的行,而不仅仅是“我得到分段错误”。其次,当你遇到问题时,你需要通过说:“在某个地方犯了错误。我犯了哪个错误?”永远不要想:“我的代码是正确的,为什么不正确?”这行得通”。总想:“我的代码错了,哪里错了?”

标签: c string parsing memory fault


【解决方案1】:

如果要打印字符串的每个字符,则应使用%c 而不是%s

printf("%c\n", file[i]);

另外,

使用printf("%s", ..) 打印字符串时,需要传递字符串所在的地址,而不是地址的内容。

因此,对于char* str = "hello",打印语句将是

printf("%s\n", str);

不是

printf("%s\n", str[0]);

【讨论】:

  • 我认为 OP 想要printf("%c\n", file[i]);
  • 谢谢,这是有道理的。我修复了在 printf 中将 %s 切换为 %c 的问题
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2022-01-21
  • 2016-05-20
相关资源
最近更新 更多