如何解决C语言和字符串
#include <stdio.h>
#include <string.h>
int main()
{
char s3[12]="ABCDEISHERO";
char s4[5]="ABCDE";
char* p=strstr(s3,s4);
printf("%s",p);
return 0;
}
我写了这段代码,但是根据strstr
的功能,我们在字符串"ABCDE"
中有子字符串s3
,但是为什么输出是(null)
?我哪里出错了?
解决方法
s4
需要 6 个元素宽以说明字符串终止符 - strstr
不匹配它,因为(很可能)最后一个字符后面有一个或多个非零字节,所以 strstr
将 s4
视为 "ABCDE???????"
,而不是 "ABCDE"
。
由约翰·博德回答。
,本声明
%{correct: false}
在 C 中有效,但在 C++ 中无效。
此声明的问题在于数组 char s4[5]="ABCDE";
不包含字符串。在 C 中,“字符串”表示“以空字符结尾的字节序列”,并且 s4
没有空格来容纳用作字符串文字 s4
的终止零字符 '\0'
一个初始化器。
因此调用期望两个参数都是指向字符串的指针的函数 "ABCDE"
会导致未定义的行为。
要么写
strstr
甚至更好
char s4[6]="ABCDE";
这是一个演示程序
char s4[]="ABCDE";
程序输出为
#include <stdio.h>
#include <string.h>
int main(void)
{
char s3[12] = "ABCDEISHERO";
char s4[] = "ABCDE";
char* p = strstr( s3,s4 );
if ( p ) printf( "%s\n",p );
return 0;
}
因为调用函数ABCDEISHERO
返回的指针strstr
指向字符数组p
的开头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。