将 char 数组复制到另一个数组中会产生垃圾值
copying char array into another array gives garbage value
我正在编写一个基于ascii 的简单加密程序。下面是我的代码,我不确定为什么在打印复制的字符串时最后会得到一个垃圾值。
output results
#include <iostream>
#include <conio.h>
using namespace std;
void encrypt(char []);
void convertToAscii(char [], char []);
int main()
{
char userString [] ="This is a string";
const int size= sizeof(userString);
char copyString[size];
convertToAscii(userString, copyString);
cout<<copyString;
_getch();
return 0;
}
void convertToAscii(char s[], char* cs)
{
for(int i=0; s[i] != '[=10=]'; i++)
{
int x = s[i];
x= x+3;
char y= x;
cs[i]=y;
cout<< x<<" "<<y<<"\n";
}
}
在 C 中,您必须以 null 终止字符串。您认识到这是因为您的 convertToAscii()
函数正在寻找输入中的空终止符;但它并没有在输出上放置一个空终止符,所以像 cout 的 operator<<
这样的方法不知道 copyString
处的值在哪里结束。
当然,为了使 convertToAscii
函数以 null 终止您的字符串,您需要在调用者中为 '[=15=]'
分配额外的 space:
char copyString[size + 1];
// ^^^
只需将终止零附加到目标字符串
void convertToAscii(char s[], char* cs)
{
size_t i = 0;
for(; s[i] != '[=10=]'; i++)
{
int x = s[i];
x= x+3;
char y= x;
cs[i]=y;
cout<< x<<" "<<y<<"\n";
}
cs[i] = '[=10=]';
}
另一种方式如下
char * convertToAscii( cosnt char *s, char *cs)
^^^^^^ ^^^^^
{
char *p = cs;
for ( ; ( *cs = *s ) != '[=11=]'; ++cs, ++s ) *cs += 3;
return p;
}
我正在编写一个基于ascii 的简单加密程序。下面是我的代码,我不确定为什么在打印复制的字符串时最后会得到一个垃圾值。
output results
#include <iostream>
#include <conio.h>
using namespace std;
void encrypt(char []);
void convertToAscii(char [], char []);
int main()
{
char userString [] ="This is a string";
const int size= sizeof(userString);
char copyString[size];
convertToAscii(userString, copyString);
cout<<copyString;
_getch();
return 0;
}
void convertToAscii(char s[], char* cs)
{
for(int i=0; s[i] != '[=10=]'; i++)
{
int x = s[i];
x= x+3;
char y= x;
cs[i]=y;
cout<< x<<" "<<y<<"\n";
}
}
在 C 中,您必须以 null 终止字符串。您认识到这是因为您的 convertToAscii()
函数正在寻找输入中的空终止符;但它并没有在输出上放置一个空终止符,所以像 cout 的 operator<<
这样的方法不知道 copyString
处的值在哪里结束。
当然,为了使 convertToAscii
函数以 null 终止您的字符串,您需要在调用者中为 '[=15=]'
分配额外的 space:
char copyString[size + 1];
// ^^^
只需将终止零附加到目标字符串
void convertToAscii(char s[], char* cs)
{
size_t i = 0;
for(; s[i] != '[=10=]'; i++)
{
int x = s[i];
x= x+3;
char y= x;
cs[i]=y;
cout<< x<<" "<<y<<"\n";
}
cs[i] = '[=10=]';
}
另一种方式如下
char * convertToAscii( cosnt char *s, char *cs)
^^^^^^ ^^^^^
{
char *p = cs;
for ( ; ( *cs = *s ) != '[=11=]'; ++cs, ++s ) *cs += 3;
return p;
}