我尝试编写一个函数来打印一个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个字符。任何帮助,将不胜感激。
答案 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)结束,这是一种机制,通过该机制知道字符串的结尾。你实际上并不需要打印它。