我的程序不适用于 strcat - 我似乎不明白为什么?
My program doesn't work with strcat - I can't seem to get why?
作为家庭作业,我必须制作一个程序,将3个字母组成的所有单词替换为"*"。
例如:
input: cod is everything and I love it
output: * is everything * I love it
这是我的程序:
int main()
{
char cuvant[101], final[101];
char* pch;
cin.get(cuvant, 100);
pch = strtok(cuvant, " ");
while (pch != NULL)
{
if (strlen(pch) == 3)
{
strcat(final, " *");
}
else
{
strcat(final, " ");
strcat(final, pch);
}
pch = strtok(NULL, " ");
}
cout << final;
}
我没有收到任何错误 - 但输出为空。此外,程序不会以代码 0 退出(因为它应该是(,它说"以代码 -1073741819 退出"。所以显然有些事情正在发生。
我使用strtok/strcat是错误的吗?
我觉得 strcat 不能在我的情况下使用,这就是错误的原因,但我不确定。我说的对吗?
如果是这样,我该如何解决我的问题?
谢谢。
您的问题是所有C-String
函数都希望您的字符串以 null 结尾(即字符' '
作为字符串的最后一个字符。
问题是final
没有初始化。它可以包含任何数量的原始垃圾。因此,当您使用strcat()
时,它必须找到终点(可能是任何地方(。
解决方案是初始化final
以确保它是零长度C-String
。
char cuvant[101];
char final[101] ={0}; // Fills the array with zero
或。
char final[101];
final[0] = ' '; // Make a C-String of length 0
返回代码。
在C++中,返回代码为 0。但是在 C 中它是未定义的(因为你没有 return 语句(。因此,您使用 C 编译器而不是C++编译器编译了代码。
未定义的值可以是任何值。值-1073741819
与任何内容一样有效。
您需要初始化final
strcpy(final, "");
以使其在开始与 strcat 一起使用之前终止 null。
或只是设置
final[0] = 0;
试试这个'c'
memset( cuvant, 0, sizeof( cuvant ));
memset( final, 0, sizeof( final ));
C++的字符串提取器将输入拆分为空格;这可以为您节省大量解析。
std::string word;
std::string result;
while (std::cin >> word) {
result += ' ';
if (word.length == 3)
result += '*';
else
result += word;
你可以使if语句看起来像这样:
if (strlen(pch) == 3)
{
strcat(final, "* ");
}
else
{
strcat(final, pch);
strcat(final, " ");
}
所以最后一个字符串不会以终止字符开头。
相关文章:
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 而循环:简单的除法程序输出零,不明白为什么
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 什么是非营利组织???我的问题是我不明白为什么有人会使用它
- 我正在尝试用 c++ 制作菜单,但不明白为什么它不循环
- 我的程序不适用于 strcat - 我似乎不明白为什么?
- 我不明白为什么会编译
- 我不明白为什么"Derived1"需要与"Derived3"相同的内存量
- 不明白为什么动态编程在这里不起作用
- 我收到"undefined reference"错误,我不明白为什么(C++ OO)
- 我不明白为什么这个行之有效
- 我不明白为什么。双倍的问题
- 不明白为什么这个简单的递归开始工作然后崩溃
- 我明白为什么,但是虚拟函数/VTable 究竟如何允许通过指针访问正确的函数?
- 我不明白为什么会出现语法错误
- 我不明白为什么当我按位或短字符时得到这个结果
- 每次运行此程序时,我都会不断获得Segfault,但我不明白为什么
- 我不明白为什么 for 循环变得无限
- 我不明白为什么我会收到语法错误或如何解决它
- 我收到此错误:错误 c2064:term 的计算结果不是采用 0 个参数的函数,但我不明白为什么