【问题标题】:why Segmentation fault (core dumped ) occur while printing string?为什么在打印字符串时会出现分段错误(核心转储)?
【发布时间】:2018-12-05 03:11:43
【问题描述】:

为什么我的代码会出现分段错误(核心转储),我检查了所有可能的测试用例。

Input: aaabbcc Output:abc

Input: abbcccccc Output:abc

它只会打印不重复的字符。

#include <stdio.h>
void main()
{
char a[100],c=0;
int i;
scanf("%s",a);
for(i=0;a[i]!="\0";i++)
{
    if(a[i]!=a[i+1])
      printf("%c",a[i]);
}
}

【问题讨论】:

  • 如果您打算使用" 而不是',请正确操作:for(i=0;a[i] != *"\0" ;i++)(或直接使用')。请注意,for(i=0; a[i]!= *"";i++) 也可以使用。
  • 太棒了,学到了新东西。

标签: c string segmentation-fault


【解决方案1】:

你的for循环条件错误a[i]!="\0"应该是a[i]!='\0',你需要寻找'\0'终止和"\0"是一个字符串(char *)。理想情况下,如果有适当的警告,您应该会收到编译警告。

for(i=0;a[i] != '\0';i++) 
{
    if(a[i]!=a[i+1])
      printf("%c",a[i]);
}

事实上,更好的 for 循环是防止数组大小越界,例如,考虑输入长度超过 100 个字符的情况

for(i=0; (a[i] != '\0' ) && ( i < (sizeof a) );i++)
{
    if(a[i]!=a[i+1])
      printf("%c",a[i]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多