我很难将给定索引的数组中的字符串复制到另一个字符串数组中,有什么建议吗?当试图在任何给定的索引上打印出tempVal的值时,它不会返回任何内容。
#include <stdio.h>
#include <string.h>
int main(void) {
const int NUM_VALS = 20;
int i;
int matchCount = 0;
int actualInput;
scanf("%d", &actualInput);
char userString[actualInput][NUM_VALS];
char tempVal[actualInput][NUM_VALS];
for (i = 0; i < actualInput; ++i) {
scanf("%s", userString[i]);
// printf("%s", userString[i]);
strncpy(userString[i], tempVal[i], strlen(userString[i])); // < -- Not sure how to make work
printf("%s", tempVal[i]); // <-- Doesn't output anything?
}
return 0;
}
使用函数来限制读取的字符数,并将终止符设置为零以及
for (int i = 0; i < actualInput; ++i) {
fgets(userString[i], NUM_VALS, stdin);
strcpy(tempVal[i], userString[i]); // < -- Not sure how to make work
printf("%sn", tempVal[i]); // <-- Doesn't output anything?
}
难怪您没有得到合适的输出,因为使用所提供的代码,您可能会遇到Segmentation错误。除此之外,代码中还有几个问题。解释所有内容并回答标题问题会让整个框架爆炸。您可以在下面看到我是如何以自己的方式更正代码的。
char*strcpy(char*目的地,const char*源(
如果destination
char
缓冲区不够大,无法容纳要由source
复制的字符串,则strcpy
可能会导致缓冲区溢出。在您的情况下,这是可以的,因为每个缓冲区userString[i]
和tempVal[i]
具有相同的容量(char
元素的数量(,但如果代码发生更改,可能会造成危害。
请注意,当您从stdin
获取字符串时,还应该限制输入字符的数量。由于这个原因,fgets()
比scanf()
更安全,因为它明确要求读取最大数量的字符。
char*strncpy(char*目的地,const char*源,size_t num(;
如果源字符串的第一个num
字符不包含终止的