C 如何在函数中打印指向字符数组的指针?
我正在尝试用c语言做我自己的简单测试。以下是我的尝试:C 如何在函数中打印指向字符数组的指针?,c,string,pointers,printf,scanf,C,String,Pointers,Printf,Scanf,我正在尝试用c语言做我自己的简单测试。以下是我的尝试: #include <stdio.h> #include <stdlib.h> void assert(char *first, char *second); int main(void) { char first[1000]; char second[1000]; printf("Enter first string: "); scanf("%s", first); pr
#include <stdio.h>
#include <stdlib.h>
void assert(char *first, char *second);
int main(void) {
char first[1000];
char second[1000];
printf("Enter first string: ");
scanf("%s", first);
printf("Enter second string: ");
scanf("%s", second);
assert(*first, *second);
return EXIT_SUCCESS;
}
void assert(char *first, char *second){
if( first == second ){
printf("Test Passed: these strings are the same");
}else{
printf("Test Failed: expected %s but returned %s", first, second);
}
}
#包括
#包括
无效断言(字符*第一,字符*第二);
内部主(空){
字符优先[1000];
字符秒[1000];
printf(“输入第一个字符串:”);
scanf(“%s”,第一个);
printf(“输入第二个字符串:”);
扫描频率(“%s”,秒);
断言(*第一,*第二);
返回退出成功;
}
无效断言(字符*第一,字符*第二){
如果(第一个==第二个){
printf(“测试通过:这些字符串相同”);
}否则{
printf(“测试失败:预期为%s,但返回了%s”,第一个,第二个);
}
}
问题是assert中else语句中的printf。当我的代码到达那一行时,它就停止了。如何修复此问题?错误:
assert
可以由实现来定义,您可以使用外部链接自己定义它
7.2诊断
[…]2 assert宏应作为宏而不是实际函数来实现。如果 宏定义被抑制,为了访问实际函数,行为未定义
将
%999s
用于999个字符和sentinelscanf
时未检查错误,可能导致使用未初始化的缓冲区:可能未找到终止符:UB
并使用
if(!strcmp(first, second))
返回退出成功
是多余的,main
具有隐式返回0代码>在C99之后的末尾。
- 这使得包含是多余的
#include <stdio.h>
#include <string.h>
void string_assert( const char *first, const char *second )
{
if ( strcmp( first, second ) == 0 )
{
printf( "Test Passed: these strings are the same" );
}
else
{
printf( "Test Failed: expected %s but returned %s", first, second );
}
}
int main( void )
{
char first[1000];
char second[1000];
printf( "Enter first string: " );
scanf( "%s", first );
printf( "Enter second string: " );
scanf( "%s", second );
string_assert( first, second );
return 0;
}
#包括
#包括
无效字符串_断言(常量字符*第一,常量字符*第二)
{
if(strcmp(第一,第二)==0)
{
printf(“测试通过:这些字符串相同”);
}
其他的
{
printf(“测试失败:预期为%s,但返回了%s”,第一个,第二个);
}
}
内部主(空)
{
字符优先[1000];
字符秒[1000];
printf(“输入第一个字符串:”);
scanf(“%s”,第一个);
printf(“输入第二个字符串:”);
扫描频率(“%s”,秒);
字符串断言(第一、第二);
返回0;
}
- 将数组发送到
函数时,应该发送它的基址代码>assert
- 要比较C中的字符串,需要使用strcmp函数。如果两者相等,则返回
。 在代码中包含0
,以使用它string.h
strcmp()
或strncmp()
。函数调用更改为assert(第一,第二)代码>。和if(first==second){
更改为if(strcmp(first,second)==0){
您想要相同或相等的字符串吗?另外,定义断言
是个坏主意,请查看assert.h
。接下来,您在读取字符串时可能会出现缓冲区溢出,请将其限制为999+sentinel:%999s
编译器没有向您发出有关此代码的警告吗?或者您是否忽略了它们?错误,可能是多个定义初始化:assert
@重复数据消除程序错误。两种错误都不会发生。7.2诊断[…]2 assert宏应作为宏而不是实际函数实现。如果为了访问实际函数而抑制宏定义,则行为未定义。
@Deduplicator噢,您正在编写。然后应重命名函数。