#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str=malloc(sizeof(char)*100);
int length=0;
printf("Enter string :\n");
scanf("%c",str);
while(*str)
{
length++;
*str++;
}
printf("%d",length);
return 0;
}
我正在尝试编写一个使用指针查找字符串长度的程序。但是无论使用什么字符串,我得到的结果都是1。有人可以告诉我这是怎么回事吗?
答案 0 :(得分:2)
您可以确定分配100个字节
char *str=malloc(sizeof(char)*100);
int length=0;
printf("Enter string :\n");
您有一个字符串,但读了一个字符
scanf("%c",str);
该字符为!= 0时,将字符增加1,例如'A'变成'B',以此类推字符
while(*str)
{
length++;
*str++;
相反,请使用fgets()读取字符串
const int maxlen = 100;
char *str=malloc(maxlen);
if (fgets(str,maxlen,stdin) != NULL)
{
// now to calculate the length
int length = 0;
char* p = str; // use a temp ptr so you can free str
while (*p++)
{
++length;
}
printf("length=%d", length);
free(str); // to avoid memory leak
}
答案 1 :(得分:1)
first.value <- 100
decline.vector <- c(0.85, 0.9, 0.925, 0.95, 0.975)
中的[100] 85, 75.5, 70.763, 67.224, 65.544
修饰符读取字符序列。由于您没有提供字段宽度,因此默认情况下它每次只能读取一个字符。您可能要使用%c
修饰符。
此外,当未添加长度修饰符时,返回的字符序列不是以null结尾的,这使您的循环可以确定长度是否有风险(您可能还想使用C标准库中的scanf
函数,但是此函数还期望终止序列为空。
答案 2 :(得分:0)
问题就是你的困扰。
char *str=(char*)malloc(sizeof(char)*100);
printf("Enter string :\n");
scanf("%s",str);
int i = 0;
for (i = 0; i < 100 && str[i] != '\0'; i ++)
{
}
printf("%d",i);