strlen 在循环中给出分段错误
strlen gives segmentation fault in loop
关于 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)或计算字符数的代码
这两行:
printf("%s",s[j]);
...
printf("%s",s[k]);
正在将字符打印为字符串。相反,这样做:
printf("%c",s[j]);
...
printf("%c",s[k]);
此外,为避免缓冲区溢出,您应该这样做:
scanf("%1023s", s);
而不是这个:
scanf("%s", s);
包含修复的完整代码(包括将 main
声明为 int main(void)
):
int main(void) {
int n,c;
char s[1024];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%1023s", 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;
}
关于 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)或计算字符数的代码
这两行:
printf("%s",s[j]);
...
printf("%s",s[k]);
正在将字符打印为字符串。相反,这样做:
printf("%c",s[j]);
...
printf("%c",s[k]);
此外,为避免缓冲区溢出,您应该这样做:
scanf("%1023s", s);
而不是这个:
scanf("%s", s);
包含修复的完整代码(包括将 main
声明为 int main(void)
):
int main(void) {
int n,c;
char s[1024];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%1023s", 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;
}