【问题标题】:How do I correctly store a string input in to character array using pointers?如何使用指针将字符串输入正确存储到字符数组中?
【发布时间】:2019-09-21 07:20:22
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char string[100];
    int count=0;

    char *pString = string;

    printf("Enter a string: \n");
    scanf("%s",string);

    while(*pString != '\0')
        count++;

    printf("String is %d characters long",count);


    return 0;
}

这是我的代码。我想编写一个简单的函数来计算字符串数组中的字符数。问题是我输入字符串后它卡住了。控制台只是冻结了。它不会释放输出。

【问题讨论】:

  • 你没有在 while 循环中增加指针
  • OT: about: scanf("%s",string); 1) 始终检查返回值(不是参数值)以确保操作成功。注意:scanf() 系列函数在使用 '%s' 和/或 '%[... ]' 始终包含比输入缓冲区长度小 1 的 MAX CHARACTERS 修饰符。这避免了缓冲区溢出和随之而来的未定义行为的任​​何可能性

标签: c arrays string pointers


【解决方案1】:

你可以使用类似的东西

#include <stdio.h>
#include <stdlib.h>

int main() {
    char string[100];
    int count = 0;

    printf("Enter a string: \n");
    char *pString = fgets(string, sizeof(string), stdin);
    if (pString == NULL) {
        fprintf(stderr, "failure reading from stdin\n");
        exit(1);
    }
    while (*pString != '\0' && *pString != '\n') {
        pString++;
        count++;
    }

    printf("String is %d characters long", count);
    return 0;
}

它使用 fgets 来检查缓冲区的长度。 fgets 还返回用户输入的换行符,因此需要额外检查“\n”。就像在 arvin 提到的 cmets 中一样,char 指针也需要在循环中递增。

【讨论】:

  • 非常感谢。当我看到你的代码时,我立即知道我的错误..我没有在每个循环中增加指针,所以它只是停留在数组的第一个索引上.. 有一件事 .. 在我的编译器上,我尝试使用你的方法使用 fgets .但它给了我一个错误。你能分配 *pString = fgets.我以为你只能把地址放在指针上。
  • fgets 返回一个指向字符串的指针(不要忘记提供一个缓冲区作为参数)。如果出现问题(例如文件结尾或错误),您将返回 NULL 并且提供的缓冲区保持不变。你得到了什么错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
相关资源
最近更新 更多