Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2010, 22:55   #1
ForzaJuve
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 38
По умолчанию Разбивка строки на части

Здравствуйте, написал программу, которая в строке ищет(указанный при вызове ф-ции) символ и заменяет его на '\0' и записывает это все в вектор argz. Однако, при попытке вывода результата (вектор argz) в основной программе возникает ошибка : при закоментированом
Код:
//printf("%s\n",tmp);
выводит абсолютно рендомные символы, если же вернуть (раскомментировать)
Код:
printf("%s\n",tmp);
то все работает нормально, однако мне не нужно делать этот вывод (нужно чтобы работало когда закоментировано). Может ли
Код:
printf("%s\n",tmp);
как-то влиять на совсем другую переменную? Надеюсь, что объяснил понятно. Заранее спасибо.

Вот код:
Код:
#include "final.h"

error_t argz_create_sep(const char *string, int sep, char **argz, size_t *argz_len){
	int i=0;
	char tmp[255];
	memset(tmp, 0, sizeof(tmp));
	while(i!=strlen(string)){
		if(string[i]==58){
			tmp[i]=0;
				i++;
		}else{tmp[i]=string[i];
	i++;}
	}
	printf("%s\n",tmp);
	*argz=tmp;
	*argz_len=strlen(string)+1;
}

int main(){

char *const string = "SHELL=/bin/bash:usr=monty:PWD=/bin/monty:LANG=en_US.UTF-8";
char *argz;
int argz_len;
int i=0,j=0;
char c[255];
size_t si;
argz_create_sep(string, 58, &argz, &argz_len);


memset(c, 0, sizeof(c));
while(i!=58){
	if(argz[i]==0){
		printf("%s\n",c);
		memset(c, 0, sizeof(c));
		j=0;
		c[j]='\0';
		i++;

	}else{
		c[j]=argz[i];
		i++;
		j++;
		}
}

getche();
}
Header file:
Код:
#ifndef _ARGZ_H
#define _ARGZ_H
#include <stddef.h> // for  size_t
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef enum  {OK, ENOMEM} error_t;

error_t argz_create_sep(const char *string, int sep, char **argz, size_t *argz_len);
size_t argz_count(const char *argz, size_t argz_len);

#endif

Последний раз редактировалось ForzaJuve; 01.11.2010 в 23:11.
ForzaJuve вне форума Ответить с цитированием
Старый 01.11.2010, 23:05   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

У меня что с printf-ом мусор с велосипедным гудком, что и без него, почти одинаковый.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.11.2010, 23:12   #3
ForzaJuve
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 38
По умолчанию

Хм, странно, у меня в devcpp все как я описывал, а в VS тоже и так и так мусор, не подскажите как исправить?
ForzaJuve вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Asm. Разбивка строки на две части levis07 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 30.03.2010 14:30
Разбивка строки на лексемы Proger_1 Общие вопросы C/C++ 3 29.03.2010 20:38
Разбивка текста на части Алекс14 Microsoft Office Word 28 23.02.2010 14:53
Разбивка строки в Delphi Slava Помощь студентам 7 30.06.2009 09:05