Как передать строку scanf в глобальный символьный массив через передачу по адресу в C++?
Позвольте мне сделать это прямо сейчас, это для класса колледжа. Я не могу использовать библиотеки C++, только стандартные библиотеки C. Не предлагайте мне использовать строки C++ или cin/cout, потому что это не поможет мне в этом назначении.
Моя проблема: у меня есть глобальные массивы символов в основной функции. Мне нужно передать строки в глобальные символьные массивы из функции scanf() в функции foo(). Все компилируется нормально, проблема в том, что функция scanf(), похоже, не влияет на глобальные массивы символов, на которые она указывает. Я использую оператор "адрес" (&), как указывают справочные издания. Возможно, я не понимаю отношения между указателем символьного массива и scanf() "адресом" (&). Я чувствую, что везде искал решение.
Я потратил несколько часов на эту проблему, поэтому теперь я ищу совет специалиста.
Вот упрощенная версия моей программы.
#include <stdio.h>
void foo(char arr1[], char arr2[]);
int main(void)
{
char arr1[20] = "initial";
char arr2[25] = "second";
foo(arr1); // <------- should change it to the string "second" upon scanf()
printf("Test Return Value: %s\n",arr1); // <---- returns "initial" (the problem)
printf("Enter a test value: ");
scanf("%s", &arr1);
printf("Test Return Value: %s\n",&arr1);
// ---------------------- this code is not part of the issue
fflush(stdin);
getchar();
return 0;
// ----------------------
}
void foo(char arr1[], char arr2[])
{
// there will be many returned values
printf("Enter a test value: ");
scanf("%s", &arr1); // <---------- the problem function (input < 20 chars)
}
3 ответа
Хотя вы обновили поговорку "решено", у меня есть несколько замечаний, которые вы можете рассмотреть:
1. Избавиться от &
до arr1
в scanf
& printf
звонки (которые решили вашу проблему, как уже упоминалось Ayjay & Dennis)
2. Правильное количество параметров, не переданных в функцию foo
(как упомянул Адриан Корниш). Таким образом, код не будет компилироваться.
3. fflush(stdin);
является неопределенным поведением. fflush
только для выходных потоков. Пожалуйста, не используйте его с stdin
, Обратитесь к этому так вопрос для деталей.
4. Если это источник C++, пожалуйста, используйте #include <cstdio>
вместо #include <stdio.h>
Всегда компилируйте код с полными предупреждениями компилятора и разрешайте их все. Это хорошая практика.:)
Надеюсь это поможет!
scanf("%s", &arr); // <---------- the problem function (input < 20 chars)
должно быть
scanf("%s", arr); // <---------- the problem function (input < 20 chars)
Опасности использования функций C io!
Правильный синтаксис для scanf
функция:
scanf("%s", arr);
Вам нужно только &
оператор для простых переменных, а не для массивов / указателей.
Кроме того, вам придется исправить неправильное использование arr1
, arr2
а также arr
, Части вашего кода используют первые два массива, остальные из последнего.