Я думаю, что "!"возможно вызывает некоторые проблемы с вашей оболочкой bash.Я запустил его без проблем.Если вы попробуете мой код, и он потерпит неудачу, попробуйте запустить его как
. / Main "Hello World" ld
Логика в вашем коде сбивает с толку, потому что вы пытаетесь использовать argv [1] и argv [2] напрямую.это можно сделать, но способ написания очень сложен для понимания.
Я уменьшил сложность кода, переименовав переменные, чтобы вам было легче следовать логике.
Я также добавляю подпрограмму для сравнения строк.Конечно, есть функция библиотеки strcmp (), я не уверен, что вы избежали этой функции из-за какого-то требования.Вы можете изменить это, чтобы использовать std strcmp ().
Хороший код должен быть задокументирован именами переменных.Вот что я придумал:
#include <stdio.h>
#include <string.h>
/* compare two c strings. Return 0 if equivalent. Return -1 if not.
* Assumes that the strings are terminated with a '\0' character */
int homegrown_strcmp(char* str1, char* str2) {
while( *str2 != '\0') {
if(*str1 != *str2)
return -1;
str1++;
str2++;
}
return 0;
}
int main(int argc, char *argv[])
{
char* haystack = argv[1]; /* This is the string we are searching inside */
char* needle = argv[2]; /* This is what we are looking for */
char* poker = haystack; /* We will use this to poke into our haystack until
* we find our needle or fail */
unsigned int position = 0;
while(*poker != '\0') {
if(homegrown_strcmp(poker, needle) == 0) {
printf("Found at position %u\n", position);
return 0;
}
poker++;
position++;
}
printf("Not found\n");
return -1;
}