Будет проще использовать указатели, если вы отделите указатель строки от его символьного указателя. Кроме того, max
должен быть сброшен для каждой строки, и вы писали последний терминатор строки за пределами выделенной памяти. Вы также используете NULL
, где вы должны использовать символ '\0'
.
Наконец, функция возвращала первый символ новой строки (который я позже free
).
#include <stdio.h>
#include <stdlib.h>
#define SIZE 4
char *bigLetters(char *str[], int size)
{
char *strNew = malloc(size + 1); // no cast or sizeof necessary
for (int i = 0; i < size; i++)
{
char ch;
char max = 'a'; // moved inside loop
char *ptr = *(str + i); // use a separate pointer
for (int j = 0; (ch = *(ptr + j)) != '\0'; j++) // pull out the character
{
if (ch > max) // >= is not necessary
{
max = ch;
}
}
*(strNew + i) = max;
}
*(strNew + size) = '\0'; // correct the bounds error
return strNew; // just the pointer not its target
}
int main(void) // correct signature
{
char *strArr[SIZE] = { "hello", "and", "good", "morning" };
char *res = bigLetters(strArr, SIZE);
printf("The new string is --> %s\n", res);
free(res); // clean up
system("pause");
}
Выход программы
The new string is --> onor Press any key to continue . . .
Существует версия № x64 Visual Studio 2008. Я выполняю стандартную 32-разрядную версию на Окончательном Vista x64, и это хорошо работает. Действительно нет никаких ежедневных проблем, на которые я натыкался. Вы просто устанавливаете его и идете.
Это было мое впечатление, что окна на 64 бита разработаны таким образом, что программы на 32 бита, которые живут полностью в UserLand "просто, работают". Для программ как драйверы устройств, для которых нужен доступ привилегированного режима, будет, вероятно, нужен 64-разрядный определенный порт.
Я не знаю ни о каких существенных исключениях к этому, хотя я уверен, что Вы могли найти некоторых, если Вы выглядите достаточно твердыми. Таким образом за возможным исключением эмуляторов мобильного устройства, Visual Studio должна быть хорошо.
Я использую VS2008 на x64 прямо сейчас. Это позволяет мне использовать своих полных 4 ГБ RAM. Это работает, но существует несколько угловых случаев для знания:
Отладка x64 приложения сделана с удаленной отладкой от 32-разрядной подсистемы до 64-разрядной подсистемы.
управляемый (.NET) приложения по умолчанию отмечены "любая платформа", что означает, что они выполняются под 64-разрядным на x64 ОС. Это означает, что организованная отладка является удаленной по умолчанию.
Там не Редактировать-и-продолжать когда удаленная отладка, таким образом, нет никакого E&C для.NET на x64 ОС, если Вы не отмечаете свое приложение как 32 бита только. Точно так же при создании собственного 64-разрядного приложения Вы не можете E&C оно.
Существует не смешан (управляемый + собственный компонент), когда удаленная отладка, таким образом, Вы не можете отладить и управляемые и собственные части x64 приложения.
У меня есть CD VS, 2005 и SP1 позволяют мне сделать x64 на своей перспективе. Должно быть то же для VS2008.
Безусловно, однажды установка, проверьте профиль компилятора, чтобы видеть, можно ли создать в X86 и X64. Если да (как я делаю на своей Vista) Вы в порядке!
В целом, это - гладкий парусный спорт для меня, таким образом, я думаю, что можно перейти прямо в.
Поскольку другие сказали, что VS является 32-разрядным приложением, поэтому пока он хорошо работает на 64-разрядной ОС, он будет только видеть, что реестр и части системы регистрации через 'волшебные' окна зеркального отражения обеспечивают.
Единственное время это было проблемой для нас, - когда мы пытались добавить ссылку на COM dll в приложении.NET. COM dll не появился в ссылочном диалоговом окне, так как это было только зарегистрировано как 64-разрядный DLL. Мы должны были зарегистрировать 32-разрядную версию для этого для работы.
Единственный недостаток - то, если Вы хотите использовать Studio управления SQL Express на Vista x64. Мой является невероятно медленным, и я не могу найти ответы, касающиеся почему!
Править:
Nevermind, у меня есть своя проблема при вводе этого.
Vista имеет TCP/IP автоматическая настраивающая функция. Следующим это учебное руководство: http://www.vistax64.com/tutorials/72308-auto-tuning-tcp-ip-receive-level.html я отключил его и теперь все работает как мечта!