只有部分char数组正在打印功能

时间:2016-01-18 18:39:38

标签: c++ arrays char

我尝试编写一个函数来打印一个char数组,但出于某种原因,它只将部分函数打印到控制台。例如:

bindkey

导致以下输出:

#include <iostream>
#include <stdio.h>

using namespace std;

void printString(char s[])
{
    int size = sizeof(s) - 1;

    for( int i = 0; i < size; i++)
    {
        cout << *(s + i);
    }
}

int main()
{
    char fruit[] = "Cherry";
    printString(fruit);
}

无论我使用哪个单词,都只打印3个字符。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:4)

  

无论我使用哪个单词,都只打印3个字符。任何帮助将不胜感激。

int size = sizeof(s) - 1;并不能按照您的想法行事。

自函数调用s What arguments can I pass to dbConnect?起,sizeof(s)总是给出指针的大小 - 1(在你的情况下似乎是32位指针== 4字节)。

改为使用size_t size = strlen(s);

void printString(char s[]) {
    size_t size = strlen(s);

    for( size_t i = 0; i < size; i++) {
        cout << *(s + i);
    }
}

答案 1 :(得分:0)

您可以执行以下操作:

void printString(char *s)
{
    while(*s!='\0')
    {
        cout << *s;
        s++ ;
    }
}

或者,您可以将代码编辑为:

#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;

void printString(char s[])
{
    int size = strlen(s);

    for( int i = 0; i < size; i++)
    {
        cout << *(s + i);
    }
}

int main()
{
    char fruit[] = "Cherry";
    printString(fruit);
}

答案 2 :(得分:0)

您的问题在以下一行:

int size = sizeof(s) - 1;

由于您正在使用函数来打印char数组,因此char数组:

char fruit[] = "Cherry";

衰减为指针,因此sizeof (s)相当于sizeof (char*),在您的配置中为{4},因此size的值等于3。

要解决此问题,您需要将数组的大小传递给您的函数,如下所示。

#include <iostream>
#include <stdio.h>

using namespace std;

void printString(char s[], int size) // Change here
{
    for( int i = 0; i < size; i++)
    {
        cout << *(s + i);
    }
}

int main()
{
    char fruit[] = "Cherry";
    printString(fruit, sizeof(fruit) / sizeof (fruit[0]) - 1); // Change here
}

即便如此,你需要使用sizeof(fruit) / sizeof (fruit[0])这样的结构来返回数组的真实大小,因为sizeof返回 bytes 中的变量大小,所以它适用于char(因为char的大小是一个字节,它可能不适用于其他类型的数组(例如int数组)。

更新:对于char数组,您需要将尝试打印的大小减小1,因为字符串文字(或类似C语言的字符串 - char数组) )以NULL字符(char,其值等于0)结束,这是一种机制,通过该机制知道字符串的结尾。你实际上并不需要打印它。