所以我正在编写这段代码来打印我输入的任何字符串的字符串长度,我基本上已经使用了代码,但是我遇到了麻烦,因为当我输入一个空白字符串时,我的程序没有正确打印到屏幕。它适用于空格(空格键)和所有其他字符串,但我必须能够输入空字符串。我们应该使用类似的东西: buf [strlen(buf) - 1] =' \ 0&#39 ;; 输入和打印空字符串, 但我不确定如何正确输入代码。任何想法??
这是我的计划:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int *MyStrlen(const char *string2);
int main()
{
char string2[100];
printf("Enter a string: \n");
scanf("%100[^\n]",&string2);
int length, length2;
length = strlen(string2);
length2 = MyStrlen(string2);
printf("strlen(''%s'') returned %d\n", &string2, length);
printf("MyStrlen(''%s'') returned %d\n", &string2, length2);
return 0;
}
另外,这里是MyStrlen函数,除了输入空字符串外,所有工作正常。
int *MyStrlen(const char *string2)
{
int stringcount=0;
while (string2[stringcount]!='\0')
{
stringcount++;
}
return stringcount;
}
答案 0 :(得分:3)
也许可以通过以下方式解决问题:
在'\0'
之前将string2的第一个元素初始化为scanf
:
string2[0] = '\0';
将int *MyStrlen(...)
的返回类型更改为int
:
int MyStrlen(const char *string2);
正如这篇文章:How to input a string using scanf in c including whitespaces,
更安全的方法是指定小于1 string2
缓冲区的大小:
scanf("%99[^\r\n]", &string2[0]);
查看scanf man page了解详情。
代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int MyStrlen(const char *string2);
// change the return type to int
int MyStrlen(const char *string2)
{
int stringcount=0;
while (string2[stringcount] != '\0')
stringcount++;
return stringcount;
}
int main()
{
char string2[100];
// Initialize the first element to 0
string2[0] = '\0';
printf("Enter a string: \n");
scanf("%99[^\r\n]", &string2[0]);
int length, length2;
length = strlen(string2);
length2 = MyStrlen(string2);
// Change to &string2 to string2
printf("strlen(''%s'') returned %d\n", string2, length);
printf("MyStrlen(''%s'') returned %d\n", string2, length2);
return 0;
}
带空字符串的输出:
Enter a string:
strlen('''') returned 0
MyStrlen('''') returned 0
带有“aaa”的输出:
Enter a string:
aaa
strlen(''aaa'') returned 3
MyStrlen(''aaa'') returned 3
答案 1 :(得分:-1)
嗯,问题在于
scanf("%100[^\n]",&string2);
将其更改为
fgets (string2, 100, stdin);
因为scanf
无法读取空白字符串。
另外,正如@ M.M的评论所述,检查&#39; \ n&#39;:
int last = strlen (string2) -1;
if (string2 [last] = '\n') {
string2 [last] = '\0';
}
在第二种情况下,我输入了一个空白字符串。
完全更正的代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int *MyStrlen(const char *string2);
// change the rerturn type to int
int *MyStrlen(const char *string2)
{
int stringcount=0;
while (string2[stringcount] != '\0')
stringcount++;
return stringcount;
}
int main()
{
char string2[100];
// Initialize the first element to 0
string2[0] = '\0';
printf("Enter a string: \n");
fgets (string2, 100, stdin);
int length, length2;
int last = strlen (string2) -1;
if (string2 [last] = '\n') {
string2 [last] = '\0';
}
length = strlen(string2);
length2 = MyStrlen(string2);
printf("strlen(''%s'') returned %d\n", string2, length);
printf("MyStrlen(''%s'') returned %d\n", string2, length2);
return 0;
}
同样如@Gomiero的回答中所述,将字符串初始化为\0
。