Не компилируется и не выдает ошибок - C (СИ)
Формулировка задачи:
Не компилируется код в gcc и при этом консоль не пишет никаких ошибок, в чем прокол?:
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
bool cut_name(char *s)
{
int i, uid;
char *ptr;
char *name = strtok(s, ":"); // получаем первое слово (имя пользователя)
for (i = 0; i < 2; i++) { // получаем ещё два слова (одно пропускаем, а второе - номер пользователя)
ptr = strtok(NULL, ":");
if (!ptr)
return false;
}
uid = atoi(ptr); // переводим имя пользователя из строки в число
s[strlen(name)] = '\0'; // в исходной строке оставляем только имя пользователя
//if (uid < 1000) // номера меньше 1000 - это системные пользователи... их будем пропускать
return false;
return true;
}
int main()
{
FILE * mf=fopen ("C:TEST.txt","r"); //etc/passwd
char lines[100][1000];
int nl = 0, nlmax = 100;
int i;
while (nl < nlmax && fgets(lines[nl], 1000, mf)) {
char *p = strrchr(lines[nl], '\n');
if (p)
*p = '\0';
nl++;
}
for (i = 0; i < nl; i++)
printf("%s\n", cut_name(lines[i]));
}Решение задачи: «Не компилируется и не выдает ошибок»
textual
Листинг программы
s[strlen(name)] = '\0';
Объяснение кода листинга программы
В данном коде происходит следующее:
- В этой строке кода идет работа со строкой
name. - Функция
strlen()используется для определения длины строкиname. - Результат функции
strlen()присваивается символу 's'. - В конце строки символа 's' присваивается значение '\0', которое является символом конца строки в C.