英文:
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);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论