#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXSTR 128
char* InputSymbol(char* Stri, char symbol);
int main() {
char s[MAXSTR], symbol;
printf("Input = \n");
gets(s, MAXSTR);
printf("Input symbol = \n");
scanf_s("%c", &symbol);
printf("%s\n", InputSymbol(s, symbol));
_getch();
return 0;
}
char* InputSymbol(char* Stri, char symbol)
{
int n = strlen(Stri), i = 0, j = 0, k = 0;
char* r = (char*)malloc(2 * n);
for (i = 0; i < n; i++)
{
r[j++] = Stri[i];
k++;
if (k == 2)
{
r[j++] = symbol;
k = 0;
}
r[j] = '\0';
}
return r;
}
char* r = (char*)malloc(2 * n);
- где в твоем коде эта выделенная память освобождается?r[j] = '\0';
? Ну символ нужно вставлять через каждые два символа.
r[j] = '\0';
char* InputSymbol(char* Stri, char symbol)
{
int n = strlen(Stri), i = 0, j = 0, k = 0;
char* r = (char*)malloc(2 * n);
r[j] = '\0';
for (i = 0; i < n; i++)
{
r[j++] = Stri[i];
k++;
if (k == 2)
{
r[j++] = symbol;
k = 0;
}
}
free (r);
return r;
}
InputSymbol
этот буфер нужно уже передавать снаружи, чтобы она ничего внутри себя уже не выделяла. Тогда твой код станет понятнее. char* InputSymbol(char* Stri, char symbol)
{
int n = strlen(Stri), i = 0, j = 0, k = 0;
char* r = (char*)malloc(2 * n);
r[j] = '\0';
for (i = 0; i < n; i++)
{
r[j++] = Stri[i];
k++;
if (k == 2)
{
r[j++] = symbol;
k = 0;
}
}
return r;
free(r);
}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MAXSTR 128
int FindNum(char *, char *);
main()
{
const char enter = '\r';
int i = 0;
char s[MAXSTR], s1[MAXSTR];
printf("s=");
do s[i] = _getche(); while (s[i++] != enter);
s[i - 1] = '\0';
printf("\ns1=");
gets_s(s1, MAXSTR);
if (strlen(s1)) /* якщо підрядок не порожній */
printf("Sum total << %s >> =%i", s1, FindNum(s,s1));
else printf("Incorrect data!");
_getch();
return 0;
}
int FindNum(char *s_a, char *s_b)
{
int j = 0;
char *p = (char *)malloc(MAXSTR);
while (p = strstr(s_a, s_b))
{
printf("%i) ", ++j);
puts(p);
strcpy_s(s_a, MAXSTR, p + strlen(s_b));
}
free(p);
return j;
}
return r;
free(r);
return
является недостижимым.free
в коде функции main
. Ведь именно там выделенная память используется.так нельзя, как вы говорите
r[j] = '\0';
а вот под его пример подогнать
InputSymbol
, тип у нее сделай void
и возвращать из нее больше ничего не надо. В конце функции просто освобождай память после вывода буфера в консоль. InputSymbol(Stri, symbol));
void InputSymbol(char* Stri, char symbol);
int main() {
char s[MAXSTR], symbol;
printf("Input = \n");
gets(s, MAXSTR);
printf("Input symbol = \n");
scanf_s("%c", &symbol);
InputSymbol(Stri, symbol));
_getch();
return 0;
}
void InputSymbol(char* Stri, char symbol)
{
int n = strlen(Stri), i = 0, j = 0, k = 0;
char* r = (char*)malloc(2 * n);
for (i = 0; i < n; i++)
{
r[j++] = Stri[i];
k++;
if (k == 2)
{
r[j++] = symbol;
k = 0;
}
}
r[j] = '\0';
free(r);
}
InputSymbol(s, symbol);
, то получаю просто строку, которую ввожу, без модификаций.void InputSymbol(char* Stri, char symbol)
{
int n = strlen(Stri), i = 0, j = 0, k = 0;
char* r = (char*)malloc(2 * n);
for (i = 0; i < n; i++)
{
r[j++] = Stri[i];
k++;
if (k == 2)
{
r[j++] = symbol;
k = 0;
}
}
r[j] = '\0';
puts(Stri); //вывод строки
free(r);
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXSTR 128
void InputSymbol(char* Stri, char symbol);
int main() {
char s[MAXSTR], symbol;
printf("Input = \n");
gets(s, MAXSTR);
printf("Input symbol = \n");
scanf_s("%c", &symbol);
InputSymbol(s,symbol);
_getch();
return 0;
}
void InputSymbol(char* Stri, char symbol)
{
int n = strlen(Stri), i = 0, j = 0, k = 0;
char* r = (char*)malloc(2 * n);
for (i = 0; i < n; i++)
{
r[j++] = Stri[i];
k++;
if (k == 2)
{
r[j++] = symbol;
k = 0;
}
}
r[j] = '\0';
puts(r);
free(r);
}