【发布时间】:2019-08-07 16:57:40
【问题描述】:
关于hackerrank问题,我需要获取字符串中元素的数量, 如何在不给出分段错误的情况下让 strlen 工作
已经搜索并得到了类似的结果,包括告诉放置“\0” 在字符串的末尾,但不知道它是如何工作的
int main() {
int n,c;
char s[1024];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s", s);
c=strlen(s);
for(int j=0;j<c;j+=2)
{
printf("%s",s[j]);
}
printf(" ");
for(int k=1;k<c;k+=2)
{
printf("%s",s[k]);
}
}
return 0;
}
请解释我如何使用 strlen 或任何其他替代方法,如 isspace 或代码来计算字符
【问题讨论】:
-
不是 strlen 给出了分段错误。使用 printf("%s",&s[j]);和 printf("%s",&s[k]) 或 printf("%s",s + j);和 printf("%s",s + k);如果您只想输出一个字符,请使用格式说明符 %c。例如 printf("%c",s[j]);
-
我建议不要使用
scanf()从标准输入读取字符串。相反,最好使用fgets()。 -
这应该是
scanf("%1023s", s);。 -
scanf是你需要尽快停止使用的拐杖。我在这里看到了太多的 C 代码 sn-ps,问题在于该工具的限制。您还需要注意返回码。scanf可以返回一个错误条件,你完全忽略它。您还应该在打开所有警告的情况下进行编译,-Wall,以了解您可能不知道的任何潜在问题。 -
@tadman 它的错误返回是 0,以防有人想知道。这意味着没有匹配的格式说明符。
标签: c segmentation-fault strlen