Я новичок в C, и я обнаружил, что моя программа работает очень странно:
Вот код:
#include <stdbool.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
char * p(char arg[] , char sym[] , int i , bool rv) {
char head[i],w[i];
strncpy(head,arg,i); head[i] = "\0";
int l;
for (l = 0 ; l <= (int)(strlen(sym) / i) ; l++) {
strncpy(w,sym+l*i,i); w[i] = "\0";
if (strcmp(head,w) == 0) {
if (rv) { return head; } else {
char v[strlen(arg) - i];
strcpy(v,arg+i);
v[strlen(arg)-i] = "\0";
return v;
};
};
};
return arg;
}
int main() {
printf(p("/parameter","+-\\/",1,false));
getch();
}
Проблема MAIN заключается в том, чтовозвращаемое значение функции - это либо «строка» случайно сгенерированных кодов, либо просто ничего.
Ожидалось, что он вернет /
для return h;
и parameter
для return v;
.
Другая проблема заключается в том, что при компиляции программы не обнаружено ни одной ошибки, кроме множества предупреждений о том, что function returns address of local variable
и assignment makes integer from pointer without a cast
.
С другой стороны, return arg;
в очень мирном ине выдает никакой ошибки.(Попробуйте изменить мои коды в p("/parameter","+-\\/",1,false)
, если не верите.) Что я сделал не так?
Использование функции:
p (« arguments_passed_to_check », « символов_принято to_be_at_the_front », «Отдельные_for_each_ i
_characters», «return_header_instead_of_parameter»)
ожидаемый 1037
ожидаемый результат: 1037 **p("-argue","/\\-",1,false)
возвращает argue
p("/help","me",1,false)
возвращает /help
p("/help","me",1,true)
возвращает (null)
p("--parameter","--++",2,false)
возвращает parameter
p("--parameter","--++",2,true)
возврат --
Резюме для чего я прошу помощи:
За исключением return arg
, другие возвращаемые деталистранно: return head;
выдаёт случайные символы;return v;
вообще ничего не возвращает.Как я могу позволить им работать как ожидаемые результаты?
Почему есть эти предупреждения?