使用指针查找字符串的长度

时间:2019-02-28 18:11:58

标签: c pointers

#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。有人可以告诉我这是怎么回事吗?

3 个答案:

答案 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);