【问题标题】:Determining the size of a array which was passed a value [duplicate]确定传递值的数组的大小[重复]
【发布时间】:2020-12-27 21:53:43
【问题描述】:
#include <iostream>
using namespace std;
int main(){
    char word[100];
    char count;
    int j=0;
    cout<<"Enter a word or a phrase"<<endl;
    cin>>word;
    cout<<endl<<word<<endl;
    j=sizeof(word);
    cout<<j;
}

我想要在上面的程序中做的是找出用户输入的字符串(单词)的长度,但是上面的程序只是给出了整个数组的大小,即 100。

【问题讨论】:

  • 为什么不用std::string?然后你可以使用std::string::size()
  • 使用数组是任务的一部分。
  • 好的。无论如何,考虑一下using namespace std; is considered a bad practice
  • @SaimBaloch assignment 所以我假设你在某个学校?如果这是真的,请考虑阅读The top answer to this question。您特别注意“询问家庭作业”/“了解学校政策”。
  • 作为提示:一种方法是,如果您只是遍历单词数组,例如 for 循环,检查 word[i] 是否为 == '\0' 然后中断,@987654330 的值@ 将是你想要的。

标签: c++ arrays variables output size


【解决方案1】:

数组的大小确实是 100。

但是您正在寻找该数组中设置的字符数,直到第一个空字节,即数组中“C-string”的长度。

strlen 这样做。

不过,如果没有其他原因,您最好使用漂亮的std::string,但目前没有执行边界检查,因此如果您的用户输入了 100 个或更多字符的文本,您的数组就会溢出。这充其量是一个令人讨厌的错误,最坏的情况是一个常见的安全风险。

【讨论】:

  • 请注意,对于字符数组和strlen,如果用户输入的字符串长度超过 99 个(100 - 1 用于终止符)字符,则所有投注都将关闭。溢出数组和程序行为will get weird
【解决方案2】:
char word[100];

这是一个 c 风格的字符串。它们是空终止的——这意味着它们以\0 结尾。示例:

INPUT: Hello!
word: 'H', 'e', 'l', 'l', 'o', '!', '\0' // <-- NULL-TERMINATOR

在 c++ 中不建议使用这些类型的字符串,并且通常只能在遗留代码中找到。请改用std::string (#include &lt;string&gt;) 及其length 函数!

【讨论】:

  • OP 必须使用 char 数组来完成。无论如何,我认为答案仍然正确。
【解决方案3】:
#include <iostream>
#include <string.h>
using namespace std;
int main(){
    char word[100];
    cout << "Enter a word or a phrase" << endl;
    cin >> word;
    cout<< strlen(word) <<endl;
}

编辑: 这是正确的,你需要包含 并使用 strlen,它会根据 '/0' 符号找到长度,这意味着 c_str 的结尾。

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多