英文:
doing the no-vowels cs50 problem and ran into an error with strcat
问题
在运行我的程序时,我遇到了错误:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("给我一个单词:" );
int j = strlen(word);
int i;
char new[j + 1];
new[0] = '\0';
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
strcat(new, "3");
}
else if (word[i] == 'i')
{
strcat(new, "1");
}
else if (word[i] == 'a')
{
strcat(new, "6");
}
else if (word[i] == 'o')
{
strcat(new, "0");
}
else
{
char p = word[i];
strcat(new, p);
}
}
printf("%s\n", new);
}
我得到了错误:
no-vowels-test.c:39:25: error: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Werror,-Wint-conversion]
strcat(new, word[i]);
^~~~~~~
&
/usr/include/string.h:149:70: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, const char *__restrict __src)
我的目标是使最后的 else
语句将数组中的当前字母 word[i]
追加到变量 new[]
中,以拼出一个新单词,在这个新单词中,每个元音字母都被数字替代,数字方面我没有问题。但是最后的 else
语句似乎有问题,我搞不清楚为什么。
英文:
When running my program:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("Give me a word: " );
int j = strlen(word);
int i;
char new[j + 1];
new[0] = '#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("Give me a word: " );
int j = strlen(word);
int i;
char new[j + 1];
new[0] = '\0';
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
strcat(new, "3");
}
else if (word[i] == 'i')
{
strcat(new, "1");
}
else if (word[i] == 'a')
{
strcat(new, "6");
}
else if (word[i] == 'o')
{
strcat(new, "0");
}
else
{
char p = word[i];
strcat(new, p);
}
}
printf("%s\n", new);
}
';
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
strcat(new, "3");
}
else if (word[i] == 'i')
{
strcat(new, "1");
}
else if (word[i] == 'a')
{
strcat(new, "6");
}
else if (word[i] == 'o')
{
strcat(new, "0");
}
else
{
char p = word[i];
strcat(new, p);
}
}
printf("%s\n", new);
}
I get the error:
no-vowels-test.c:39:25: error: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Werror,-Wint-conversion]
strcat(new, word[i]);
^~~~~~~
&
/usr/include/string.h:149:70: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, const char *__restrict __src)
My goal here is to make the last else
statement append the current letter in the array of word[i]
into the variable new[]
to spell out a new word where every vowel is replaced by a number, the numbers I have no problem with. But the last else
statement seems to have a problem and I cant figure out why.
答案1
得分: 2
要使用strcat
,您需要提供一个指向以NUL结尾的字符串的指针。
char s[2] = { word[i], 0 };
strcat(new, s);
但您不需要使用strcat
来添加单个字符,特别是因为您已经知道要写入字符的位置。您只需要使用new[i] = c;
。只要完成后不要忘记用NUL终止您的字符串。
英文:
To use strcat
, you would need to provide a pointer to a NUL-terminated string.
char s[ 2 ] = { word[ i ], 0 };
strcat( new, s );
But you don't need strcat
to add a single character. Especially since you already know the position at which to write the character. All you need is new[ i ] = c;
. Just don't forget to terminate your string with a NUL once you're done.
答案2
得分: 1
第二个参数传递给 strcat
必须是一个C字符串,即以空字符结尾的 char
数组,而不是一个单独的 char
,比如 p
。
你可以使用 strncat
来解决这个问题:将 strcat(new, p);
和前一行替换为:
strncat(new, &word[i], 1);
这会将起始于 word[i]
的字符串的最多1个 char
连接起来。
另一种方法是直接设置 new
中的字节:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("给我一个单词:");
int i;
int j = strlen(word);
char new[j + 1];
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
new[i] = '3';
}
else if (word[i] == 'i')
{
new[i] = '1';
}
else if (word[i] == 'a')
{
new[i] = '6';
}
else if (word[i] == 'o')
{
new[i] = '0';
}
else
{
new[i] = word[i];
}
}
new[i] = '#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("给我一个单词:");
int i;
int j = strlen(word);
char new[j + 1];
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
new[i] = '3';
}
else if (word[i] == 'i')
{
new[i] = '1';
}
else if (word[i] == 'a')
{
new[i] = '6';
}
else if (word[i] == 'o')
{
new[i] = '0';
}
else
{
new[i] = word[i];
}
}
new[i] = '\0';
printf("%s\n", new);
}
';
printf("%s\n", new);
}
英文:
The second argument to strcat
must be a C string, ie: an array of char
terminated with a null byte, not a single char
such as p
.
You can fix this problem with strncat
: replace strcat(new, p);
and the previous line with:
strncat(new, &word[i], 1);
This concatenates at most 1 char
from the string starting at word[i]
.
Another approach would set the bytes in new
directly:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("Give me a word: " );
int i;
int j = strlen(word);
char new[j + 1];
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
new[i] = '3';
}
else if (word[i] == 'i')
{
new[i] = '1';
}
else if (word[i] == 'a')
{
new[i] = '6';
}
else if (word[i] == 'o')
{
new[i] = '0';
}
else
{
new[i] = word[i];
}
}
new[i] = '#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string word = get_string("Give me a word: " );
int i;
int j = strlen(word);
char new[j + 1];
for (i = 0; i < j; i++)
{
if (word[i] == 'e')
{
new[i] = '3';
}
else if (word[i] == 'i')
{
new[i] = '1';
}
else if (word[i] == 'a')
{
new[i] = '6';
}
else if (word[i] == 'o')
{
new[i] = '0';
}
else
{
new[i] = word[i];
}
}
new[i] = '\0';
printf("%s\n", new);
}
';
printf("%s\n", new);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论