Я новичок в управлении C/указателями/памятью, и у меня возникли проблемы с выполнением нескольких функций для проекта, над которым я работаю.C: Возвращающаяся строка из другой функции
В моем файле builtins.c у меня есть функция printalias
, которая вызывается для печати всех имен псевдонимов и соответствующих значений, сохраненных в моей программе. В конце я хочу напечатать одно из имен псевдонимов, извлекая его с помощью другой функции getal
.
int x_printalias(int nargs, char *args[]) {
int i = 0;
// Loop through, print names and values
for(i = 0; i< 100; i++)
{
if(alias_names[i][0]!='\0' && !alias_disabled[i])
{
char * var = alias_names[i];
char * val = alias_vals[i];
fprintf(stderr,"%s = %s\n", var, val);
}
}
// This is where I want to retrieve the string from another function
char * hello = "brett";
hello = getal(hello);
fprintf(stderr,"Got alias for brett --> %s",hello);
return 0;
}
Моя getal
функция существует в моем файле shellParser.c и выглядит, как правило, выполняет ту же зацикливание и возвращение, когда он находится:
const char * getal(int nargs, char *args[])
{
fprintf(stderr,"\nRetrieving alias...\n");
int i = 0;
fprintf(stderr, "check1\n");
fprintf(stderr,"Got args[0]: %s\n", args[0]);
while (alias_names[i][0]!='\0' && i < MAX_ALIAS_LENGTH) // Find empty slot in variables array
{
fprintf(stderr, "check2\n");
fprintf(stderr,"I is currently %i and current varible in slot is %s\n",i,alias_names[i]);
//strncpy(hello, variables[i], MAX_VAR_LENGTH); // Variable at current slot
if(strcmp(alias_names[i], args[0]) == 0) // If we have an entry, need to overwrite it
{
fprintf(stderr,"Found alias %s = %s at spot %i\n",args[0],alias_vals[i], i); // Not at end if here
return alias_vals[i];
}
i++;
}
fprintf(stderr, "check3\n");
// Elided....
return '\0';
}
В конце моей printalias
функции я хотите проверить, что эта функция getal
работает, вызывая ее на жестко закодированной строке «brett». Однако, когда я вызываю свой printalias function
из командной строки, он переводит его в инструкцию печати «Проверить 1», а затем просто завершает работу без ошибки или возвращаемого значения.
Я думаю, что это имеет какое-то отношение к управлению памятью или неправильному объявлению переменных с помощью указателей. Может ли кто-нибудь обнаружить что-то (или много чего), что я здесь делаю неправильно?
Вы называете 'getal' функции с одним аргументом типа' '* полукокса и ваше определение этой функции говорит, что требуется два аргумента типов 'int' и' char * [] '. –
Если вы хотите использовать переменные-аргументы в 'getal', вам нужно будет' #include 'и объявить' const char * getal (int, ...) '. Эллипсис сообщает компилятору, что функция принимает переменные аргументы. Используйте 'va_start()' для инициализации 'переменной', которую вы хотите, например,' args' в вашем случае. И используйте 'va_end()' для очистки используемой памяти. –
alvits
Возможный дубликат [Возврат строки из функции в C] (http://stackoverflow.com/questions/9378998/returning-a-string-from-a-function-in-c) – Mgetz