【发布时间】:2018-10-21 18:55:15
【问题描述】:
:) 我试图在 c 中击败字符串指针,所以我编写了这段代码,但没有得到我期望的结果。
我正在创建一个字符串变量,我想将它传递给一个检查字符串长度是否大于 10 的函数。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool is_bigger_than_10(char *);
int main()
{
char *string1 = "";
int i = 0;
printf("Initial string: %s\n",&string1);
printf("Size is: %d\n",strlen(&string1));
printf("Give me one string: ");
scanf("%[^\t\n]s",&string1); //This scan allows me to enter string with spaces
printf("You write: %s\n", &string1);
printf("Size is: %d\n",strlen(&string1));
printf("String character by character:\n");
for(i = 0; i < strlen(&string1) ; i++)
{
printf("%c ",&string1[i]);
}
printf("\nNow let's check if it's bigger than 10\n");
printf("Answer is: %d",is_bigger_than_10(&string1));
return 0;
}
bool is_bigger_than_10(char *textx)
{
printf("%s --> %d > %d\n",&textx, strlen(&textx),10);
if(strlen(&textx) > 10)
{
return true;
}
else
{
return false;
}
}
预期的输出应该是:
初始字符串:
大小为 0:
给我一根绳子:axel
你写:阿克塞尔
逐个字符串:
a x e l
现在让我们检查它是否大于 10
a x e l --> 4 > 10
答案是:0
如果您运行该代码并输入 axel 作为输入字符串,您将得到:
初始字符串:$0@
尺寸为 3:
给我一根绳子:axel
你写:阿克塞尔
逐个字符的字符串:a b c d e
a x e l
现在让我们检查它是否大于 10
' --> 3 > 10
答案是:0
这有点奇怪,谁能帮我更正这段代码?
【问题讨论】:
-
如果您打开警告,您应该会收到很多关于您过度使用
&运算符的警告。 -
您的字符串是数组,因此是指针,因此您不需要使用它们的地址来引用它们进行 printf 等。
-
@MandyShaw -- 数组不是指针;数组标识符 decay 在大多数表达式中(例如在函数调用中)指向其关联数组的第一个元素的指针,但数组在 C 中是对象。
标签: c string function pointers strlen